/branches/salvo_gps/Basis_v0067g/trunk/Flight-Ctrl_MEGA644_V0_02.hex |
---|
0,0 → 1,1904 |
:100000000C9447020C9464020C9464020C946402F5 |
:100010000C9464020C9464020C9464020C946402C8 |
:100020000C9464020C94D60B0C9464020C9464023D |
:100030000C94A3150C9464020C9464020C94640256 |
:100040000C9464020C9464020C94CD0A0C94640227 |
:100050000C94F5060C9464020C947B040C946402DA |
:100060000C94BC0C0C9464020C94D8140C94640290 |
:100070000A0A0D004E65757472616C004865616412 |
:10008000696E67486F6C64000A0D5374657565721C |
:10009000756E673A20004F4B0A0D000A0D416267EA |
:1000A0006C65696368204C756674647275636B7304 |
:1000B000656E736F722E2E000A0D42656E75747A2E |
:1000C0006520506172616D657465727361747A2028 |
:1000D0002564000A0D496E69742E20454550524F23 |
:1000E0004D3A2047656E65726965726520446566A4 |
:1000F00061756C742D506172616D657465722E2E20 |
:100100002E000A0D3D3D3D3D3D3D3D3D3D3D3D3DCE |
:100110003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D0F |
:100120003D3D000A0D466C69676874436F6E7472DA |
:100130006F6C0A0D48617264776172653A25642EAE |
:1001400025640A0D536F6674776172653A562564AB |
:100150002E256420002E0052616E67653A253369B2 |
:100160002D253369005374656C6C756E673A2025D4 |
:10017000336900536574706F696E7420202533698C |
:1001800000536572766F202000506F7469343A20F6 |
:100190002025336900506F7469333A202025336974 |
:1001A00000506F7469323A202025336900506F7413 |
:1001B00069313A20202533690053746172743A2002 |
:1001C00020202020253569004D6573737765727492 |
:1001D0003A2020253569005269636874756E673A64 |
:1001E0002020253569004B6F6D70617373202020CE |
:1001F0002020202000456D70662E506567656C3AA2 |
:10020000253569005370616E6E756E673A20202542 |
:10021000356900486F6368202534692028253369D3 |
:100220002900526F6C6C20253469202825336929F8 |
:10023000004E69636B202534692028253369290025 |
:10024000414343202D2053656E736F7200476965EB |
:10025000722025346920282533692900526F6C6C7F |
:1002600020253469202825336929004E69636B20D5 |
:10027000253469202825336929004779726F202D9C |
:100280002053656E736F720050333A253469202015 |
:1002900050343A253469200050313A253469202001 |
:1002A00050323A253469200047733A2534692020BA |
:1002B00047693A25346920004E693A25346920207F |
:1002C000526F3A25346920004B373A253469202093 |
:1002D0004B383A25346920004B353A2534692020C3 |
:1002E0004B363A25346920004B333A2534692020B7 |
:1002F0004B343A25346920004B313A2534692020AB |
:100300004B323A25346920004B6F6D706173733A3C |
:1003100020202025356900526F6C6C3A2020202067 |
:100320002020253569004E69636B3A20202020206B |
:100330002025356900616B742E204C61676500488B |
:10034000F668656E726567656C756E67004B65690A |
:100350006E6520004F66662020202020203A202550 |
:100360003569004C756674647275636B3A20253587 |
:100370006900536F6C6C486F6568653A2025356974 |
:1003800000486F6568653A202020202025356900E7 |
:1003900028632920486F6C6765722042757373006B |
:1003A00053657474696E673A202564200048573A93 |
:1003B0005625642E25642053573A25642E25640063 |
:1003C0002B2B204D696B726F4B6F70746572202BF5 |
:1003D0002B005B25695D00000011002300340046FE |
:1003E00000570069007A008B009C00AE00BF00D06F |
:1003F00000E100F200030114012401350146015619 |
:10040000016601770187019701A701B601C601D5F1 |
:1004100001E501F4010302120221022F023E024C07 |
:10042000025A0268027502830290029D02AA02B774 |
:1004300002C302CF02DB02E702F302FE0209031449 |
:10044000031F03290333033D03470350035903628A |
:10045000036B0373037B0383038A03920399039F54 |
:1004600003A603AC03B203B703BC03C103C603CAAC |
:1004700003CE03D203D603D903DC03DE03E103E397 |
:1004800003E403E603E703E703E803E803001124BA |
:100490001FBECFEFD0E1DEBFCDBF11E0A0E0B1E0E5 |
:1004A000EEE5F6E702C005900D92A039B107D9F745 |
:1004B00016E0A0E9B1E001C01D92A630B107E1F756 |
:1004C0000E94A3020C942E3B0C94000022E030E02A |
:1004D000D9010E941A3B802D863028F082E0D90194 |
:1004E000082E0E94223B99270895FB01282F863071 |
:1004F00008F025E0842F9927429FD0011124AC59A0 |
:10050000BF4F019724F001900E94223BFACFA2E056 |
:10051000B0E0022E0E94223B0895CF93DF93FB01AF |
:10052000C42FDD27863008F085E0489FD0011124D4 |
:10053000AC59BF4F219724F00E941A3B0192FACF89 |
:10054000DF91CF9108951F93CF93DF9314B815B81F |
:10055000189B02C08BE001C08AE08093000181E813 |
:1005600087B98FEF88B98BE184B981E085B98EE3D3 |
:100570008AB9579A87EF8BB984B7877F84BF8091F8 |
:1005800060008861809360001092600080ED97E0C9 |
:100590009093AF018093AE01109236021092350213 |
:1005A0001092DF041092DE04109234021092330293 |
:1005B0001092320210923102809100018A3011F4BF |
:1005C000289801C0289A0E947D0C0E94B1050E94C3 |
:1005D0008E150E94B60C0E94BE1478941092DD0312 |
:1005E00082E08093DE0385E08093DF0320910001A9 |
:1005F00082E090E09F938F931F921F92822F6AE078 |
:100600000E94AA3A892F99279F938F93822F0E9445 |
:10061000AA3A99279F938F9383E291E09F938F93B8 |
:100620001F920E942B0882E091E09F938F931F926C |
:100630000E942B08299AA1E0B0E00E941A3B802D6D |
:100640002DB73EB7225F3F4F0FB6F8943EBF0FBEA7 |
:100650002DBF8E33A9F183ED90E09F938F931F926E |
:100660000E942B080E944C1D4AE366E075E080E082 |
:100670000E94750211E00F900F900F90123049F414 |
:100680000E94D61C4AE366E075E082E00E94750293 |
:1006900013E04AE366E075E0812F0E9475021F5F58 |
:1006A000163060F382E022E030E0D901082E0E948B |
:1006B000223B8EE321503040D901082E0E94223B7C |
:1006C000C2E0D0E0DE010E941A3B802D863028F087 |
:1006D00082E0DE01082E0E94223B4AE366E075E0DC |
:1006E0000E948D02DE010E941A3B802D863028F088 |
:1006F00082E0DE01082E0E94223B99279F938F9370 |
:1007000088EB90E09F938F931F920E942B0880911B |
:100710000E050F900F900F900F900F9080FD03C06B |
:10072000C8EED3E020C08BE990E09F938F931F9297 |
:100730000E942B0888EE93E00E94C10BEC010E94FE |
:100740008C100F900F900F90CE010E94CA0B88233F |
:10075000D9F386E990E09F938F931F920E942B0814 |
:100760000F900F900F900E94091E809100018A3017 |
:1007700011F4289801C0289A80ED97E09093AF017A |
:100780008093AE0188EE93E09093D8038093D703D3 |
:1007900085E58093D20388E890E09F938F931F9222 |
:1007A0000E942B0880910E050F900F900F9082FFF2 |
:1007B00003C08CE790E002C084E790E09F938F93A2 |
:1007C0001F920E942B080F900F900F9080E790E0EF |
:1007D0009F938F931F920E942B080E94D01088E84D |
:1007E00093E190937B0180937A010F900F900F908B |
:1007F0008091AB01882309F451C01092AB010E9493 |
:100800004D1F0E94C21D209100012A3011F428982A |
:1008100001C0289A80910201882319F081508093A9 |
:10082000020180913002882329F0809130028150AA |
:100830008093300280917A0190917B01892B01F5A0 |
:1008400085E090E090937B0180937A010E94681587 |
:1008500080910301909104018F5F9F4FF9F4809183 |
:1008600037028823D9F080E197E29093AF0180931B |
:10087000AE0180E890E090930401809303010EC0E4 |
:1008800080917A0190917B01019790937B018093F5 |
:100890007A012A3011F4289801C0289A0E94CC05C8 |
:1008A0000E944B06CE010E94CA0B882309F4A0CFF8 |
:1008B000209107013091080180911E059927281782 |
:1008C00039079CF480910301909104018F5F9F4F41 |
:1008D00061F480E797E19093AF018093AE0180E0EF |
:1008E00093E0909304018093030184E690E00E94DA |
:1008F000C10BEC017DCF1F920F920FB60F92112406 |
:100900008F939F93EF93FF93809101018823E1F4EC |
:100910008091A7019091A80101969093A8018093DE |
:10092000A701FC01EC55FD4FE081ED3019F086394F |
:10093000910539F41092A8011092A70181E08093EB |
:100940000101E093C60004C01092A8011092A70113 |
:10095000FF91EF919F918F910F900FBE0F901F907D |
:100960001895DC0120E030E040E050E0E4EAF2E0FD |
:1009700005C08191280F311D4F5F5F4F4A175B07FC |
:10098000C1F73F70C90136E0969587953A95E1F732 |
:10099000835CFD01EC55FD4F808311962F73235C22 |
:1009A000FD01EC55FD4F2083AB55BD4F8DE08C9381 |
:1009B000109201018091A4028093C6000895EF92E5 |
:1009C000FF920F931F93CF93DF937A01722F93E2DD |
:1009D0009093A4026093A5028093A60203E010E026 |
:1009E00060E0A7EAB2E046C0F701E60FF11D908192 |
:1009F0006F5F715019F4E0E040E00FC0F701E60FBF |
:100A0000F11D40816F5F715011F4E0E006C0F70105 |
:100A1000E60FF11DE0816F5F7150892F86958695F5 |
:100A2000835C8C935527892F99278370907024E0DD |
:100A3000880F991F2A95E1F79A0194E0369527953A |
:100A40009A95E1F7822B835CED0189834F7050709A |
:100A5000440F551F440F551F8E2F829586958695FE |
:100A60008370842B835C8A83EF73E35CEB830C5F7E |
:100A70001F4F1496772309F0B7CFC8010E94B10425 |
:100A8000DF91CF911F910F91FF90EF9008951F93E9 |
:100A9000CF93DF93EC0170E0A22FBB27129748C0E1 |
:100AA000E42FFF27E951FC4F30814F5FE42FFF27F0 |
:100AB000E951FC4F50814F5FE42FFF27E951FC4F74 |
:100AC00010814F5FE42FFF27E951FC4F20814F5FDA |
:100AD000842F9927A817B90774F15D53FE01E70F1A |
:100AE000F11D3D53330F330F852F82958F70382BB7 |
:100AF0003083613001F1912F9D537F5FFE01E70F3D |
:100B0000F11D71505295507F892F86958695582BEF |
:100B1000508363506F3F79F07E5FFE01E70FF11D58 |
:100B20009295990F990F907C2D53922B90837F5F14 |
:100B3000662309F0B5CFDF91CF911F9108951F93E0 |
:100B4000182F8A3019F48DE00E949F058091C00013 |
:100B500085FFFCCF1093C60080E090E01F910895C0 |
:100B60000895E1ECF0E088E18083A0ECB0E08C91A6 |
:100B700082608C93808180688083808180648083A0 |
:100B80008AE28093C40088EC90E00E94C10B9093AD |
:100B9000D1038093D003089580910101882309F443 |
:100BA00079C080919001882371F0809101018823A0 |
:100BB00051F02BE042ED53E06091A30287E40E94E4 |
:100BC000DF04109290018091D0039091D1030E9494 |
:100BD000CA0B882321F4809192018823F9F0809137 |
:100BE00001018823D9F022E44DE754E06091A3028B |
:100BF00084E40E94DF041092920180919E01909102 |
:100C00009F01019690939F0180939E018AEF90E04F |
:100C10000E94C10B9093D1038093D00380919101E6 |
:100C2000882331F180910101882311F10E94D910AC |
:100C3000109291018091A001982F9F5F9093A00145 |
:100C4000943059F426E14AED54E060E084E30E94D8 |
:100C5000DF048FEF8093A0010BC044E1949FA001BB |
:100C60001124475E5E4F24E160E08F5C0E94DF0448 |
:100C700080919301882371F080910101882351F0C4 |
:100C80002AE04DED53E06091A30286E50E94DF0467 |
:100C90001092930108951F93CF93DF93CDB7DEB7E2 |
:100CA00022970FB6F894DEBF0FBECDBF809195019D |
:100CB000882309F490C08FEF809302018091E903AB |
:100CC000813758F48C3608F067C08736C9F188360A |
:100CD000C1F0833609F07DC008C0843721F1863722 |
:100CE00059F1813709F075C02FC02091980143E078 |
:100CF0006BE082ED93E00E94470581E080939201D2 |
:100D000068C02091980143E062E0CE0101960E9404 |
:100D100047058091D5019981892B8093D50181E088 |
:100D20008093910156C02091980143E064E08AE9E4 |
:100D300091E00E9447054DC081E08093930149C036 |
:100D400081E08093900145C02091980143E062E0EA |
:100D5000CE0101960E94470589818F3F89F0863038 |
:100D600010F085E089834AE366E075E089810E949E |
:100D70008D0289812AE346E055E06091A30208C014 |
:100D80001091A3020E9466022AE346E055E0612F1B |
:100D9000855B0E94DF041DC02091980143E06AE357 |
:100DA00086E095E00E9447058091E9034AE366E00A |
:100DB00075E08B560E9475028091E9038B56A2E084 |
:100DC000B0E0082E0E94223B0E94660299270E94F2 |
:100DD000C11C1092950122960FB6F894DEBF0FBE8B |
:100DE000CDBFDF91CF911F9108951F920F920FB643 |
:100DF0000F9211242F933F934F935F936F937F93A1 |
:100E00008F939F93AF93BF93CF93DF93EF93FF9312 |
:100E10008091C60080939401809194010E942B30B0 |
:100E20004091A201463910F01092A10180919401E5 |
:100E30008D3009F05DC08091A101823009F058C069 |
:100E40001092A101A42FBB27FD01EB51FC4F308173 |
:100E5000ED01CA51DC4F28818091A5019091A60136 |
:100E6000831B9109821B91099F709093A601809327 |
:100E7000A5019C01689415F8369527951694E1F71D |
:100E8000235C2093A401982F9F73935C9093A301FC |
:100E90008081281729F48881981711F491E006C001 |
:100EA000809197018F5F8093970190E080919501E9 |
:100EB000882309F064C0992309F461C081E080931C |
:100EC000950140939801A951BC4F8DE08C9380917E |
:100ED000E903823509F053C088E190E02CE00FB6B9 |
:100EE000F894A895809360000FBE2093600047C0DF |
:100EF0008091A1018130D9F0813018F08230E9F57C |
:100F000030C080919401833239F480919501882317 |
:100F100019F481E08093A101809194018093E7030B |
:100F200081E08093A20180919401992715C082E00D |
:100F30008093A101E42FFF2780919401E951FC4F98 |
:100F400080834F5F4093A201209194018091A5017D |
:100F50009091A601820F911D9093A6018093A50107 |
:100F60000EC0E42FFF2780919401E951FC4F80834C |
:100F7000463938F31092A101E7CF1092A101FF91F9 |
:100F8000EF91DF91CF91BF91AF919F918F917F9121 |
:100F90006F915F914F913F912F910F900FBE0F90E6 |
:100FA0001F901895982F8091BF04813069F480912B |
:100FB000D401E82FFF27E75EFE4F90838F5F809379 |
:100FC000D40121E030E005C0892F0E949F05282F21 |
:100FD0003327C90108951F93182F04C080E30E948E |
:100FE000D20711501116D4F31F9108951F93182F93 |
:100FF00004C080E20E94D20711501116D4F31F9151 |
:1010000008950F931F93CF93DF938C01EB0108C0DA |
:10101000F8010F5F1F4FE4918E2F0E94D207219796 |
:101020002097B1F7DF91CF911F910F9108950F9302 |
:101030001F93CF93DF938C01EB0106C0F8018191E0 |
:101040008F010E94D20721972097C1F7DF91CF919E |
:101050001F910F9108952F923F924F925F926F923E |
:101060007F928F929F92AF92BF92CF92DF92EF9238 |
:10107000FF920F931F93CF93DF93CDB7DEB7E39724 |
:101080000FB6F894DEBF0FBECDBF29968FAD29975E |
:101090008093BF04CE01855B9F4F9D838C832B96ED |
:1010A0008EAD9FAD2B979FA78EA7222433242101BD |
:1010B00002C0130124010EA51FA502C00F5F1F4F20 |
:1010C000F801F490FF2019F0F5E2FF16B9F7B80126 |
:1010D0008EA59FA5681B790B11F00E940108FF20C7 |
:1010E00009F442C20F5F1F4F1FA70EA71982AC81E0 |
:1010F000BD811BAA1AAA9FEF99ABEEA5FFA5CF0150 |
:1011000001969FA78EA7B49095E7B91621F08B2D75 |
:101110008062883789F4EBA9E0FF07C02D903D90ED |
:101120004D905C901397149607C08D919C911197E8 |
:101130001C01442455241296F0E2BF1621F4898143 |
:101140008823D9F685C083E2B81609F483C09AE2F1 |
:10115000B91621F0EDE2BE1669F408C0FD01129641 |
:10116000E081EAABE7FFC9CFE195EAABFBA9F0610B |
:10117000FF7D72C08BE2B81609F46AC09EE2B91610 |
:10118000B1F52EA53FA52F5F3F4FEEA5FFA584919A |
:101190008A3221F0B82E20E030E01BC0FD0112960B |
:1011A0004081518157FF02C04FEF5FEF49AB3FA72E |
:1011B0002EA7A3CFC90103E0880F991F0A95E1F775 |
:1011C000220F331F280F391F2B0D311D20533040A4 |
:1011D000B49031968B2D80538A3060F3FFA7EEA731 |
:1011E000A90137FF02C04FEF5FEF49AB8DCFF0E3AE |
:1011F000BF1631F48BA984FD80CF80628BAB7DCF8D |
:101200008B2D81538930E8F420E030E0C901F3E010 |
:10121000880F991FFA95E1F7220F331F280F391F06 |
:101220002B0D311D20533040EEA5FFA5CF010196B7 |
:101230009FA78EA7B4908B2D80538A3038F32AABAA |
:1012400063CF98E6B91651F4EBA9E460EBAB55CF48 |
:10125000B98253CFFBA9F860FBAB4FCF8CE6B81631 |
:1012600021F49BA991609BAB48CFBD83AC83E3E69F |
:10127000BE1639F41296BD83AC8312978C918E837F |
:1012800018C1F4E4BF1639F084E6B81639F099E6CF |
:10129000B91659F503C0EBA9E160EBABFBA9F0FF70 |
:1012A00008C01496BD83AC835E904E903E902E9005 |
:1012B0000AC01296BD83AC839E918E911C0144247A |
:1012C00037FC4094542C57FC03C08AE088AB92C092 |
:1012D0005094409430942094211C311C411C511C8A |
:1012E0008DE289839AE098AB85C0EFE4BE1629F0C1 |
:1012F000FFE6BF1639F488E061C09BA991609BAB03 |
:10130000E8E056C0F0E7BF1671F41296BD83AC83D7 |
:101310009E918E911C01442455248BA980648BAB33 |
:1013200078E7B72E5EC0E3E7BE16D9F51296BD8307 |
:10133000AC83DE90CE90C114D10489F488E28E8310 |
:101340008EE68F8385E788878CE689878A8789E29E |
:101350008B871C8666E0C62ED12CCC0EDD1EF9A92B |
:10136000F7FD13C04F2F552747FD509560E070E003 |
:10137000C6010E941639009711F419A90DC08C19E5 |
:1013800019A981174CF4182F07C0F601019000200D |
:10139000E9F731971E2F1C1919824201310140E0F3 |
:1013A00094C085E5B81631F095E7B91649F4EAE03E |
:1013B000E8AB1FC0FBA9F160FBAB8AE088AB19C0AA |
:1013C00098E5B91621F0E8E7BE1609F06EC0FBA952 |
:1013D000F3FD02C080E1F2CF211431044104510435 |
:1013E00019F490E198AB05C0EBA9E064EBABF0E138 |
:1013F000F8AB198289A987FD03C09BA99F7D9BAB90 |
:10140000211431044104510461F4E9A9EE2349F4A3 |
:101410006624772443015EE2C52ED12CCC0EDD1E5E |
:101420003EC04EE2C42ED12CCC0EDD1EF8A9EF2E0C |
:10143000FF2400271127C201B101A80197010E94D2 |
:10144000DD3A6A3020F430E3A32EA60E08C027E56B |
:10145000A22EA60E88E5B81611F49FEDA922F6017A |
:10146000A2926F01C201B101A80197010E94DD3A69 |
:1014700039014A012E143F044006510618F01901A3 |
:101480002A01D9CFF8A9F83051F48BA983FF07C0FE |
:1014900090E3A91621F080E3F60182936F01CE015B |
:1014A0008C19182F125D49A910C0BB2009F45CC02B |
:1014B000BE8219824201310100E096E0C92ED12C92 |
:1014C000CC0EDD1E11E021E005C0212F042F011BF1 |
:1014D00007FD00E08981882319F0812F8F5F07C005 |
:1014E0009BA996FD02C0812F02C0822F8E5FA82E7D |
:1014F000A00EEBA9EE2EFF2480E3482E512C4E20A7 |
:101500005F204114510421F48AA98A190E94F60728 |
:101510008981882329F061E070E0CE01019609C03D |
:10152000E6FE09C080E38A83BB8262E070E0CE0100 |
:1015300002960E941708F0E24F16510421F48AA97E |
:101540008A190E94EB07802F0E94EB07612F7727F3 |
:1015500067FD7095C6010E941708E4FEAACD8AA90E |
:101560008A190E94F607A5CDE3960FB6F894DEBF60 |
:101570000FBECDBFDF91CF911F910F91FF90EF90E4 |
:10158000DF90CF90BF90AF909F908F907F906F90A3 |
:101590005F904F903F902F9008951F920F920FB63B |
:1015A0000F9211242F933F935F936F937F938F93A9 |
:1015B0009F93AF93BF938091B70181508093B70100 |
:1015C0008F3F59F58091B5019091B601009729F0B0 |
:1015D00001979093B6018093B50189E08093B7019C |
:1015E000809106018F5F817080930601882319F432 |
:1015F00081E08093AB018091A9019091AA010196AD |
:101600009093AA018093A90180919A02882329F0DE |
:1016100080919A02815080939A028091AE019091BC |
:10162000AF010297B8F08091AE019091AF010197A0 |
:101630009093AF018093AE018091AE019091AF0184 |
:10164000209103013091040182239323892B09F017 |
:1016500084C006C08FEF9FEF909304018093030135 |
:10166000809100018A3039F404C05A9A05C0479A23 |
:1016700003C05A9801C04798349B0AC08091AC01BE |
:101680009091AD0101969093AD018093AC016BC038 |
:101690008091AC019091AD01892B09F440C08091FB |
:1016A000AC019091AD01805A9F40C8F58FEF90E05A |
:1016B0009093B6018093B50180911E0290911F0214 |
:1016C0009093B4018093B3018091AC019091AD01EE |
:1016D0008758904090931F0280931E0280911E02B3 |
:1016E00090911F0297FF0AC080911E0290911F02E5 |
:1016F00088599E4F90931F0280931E0280911E0274 |
:1017000090911F028856914054F080911E02909152 |
:101710001F028856914090931F0280931E02809171 |
:101720001E0290911F022091200230912102821B03 |
:10173000930B845E9D4F68E671E00E94CA3A845B19 |
:101740009040909323028093220281E08093B20123 |
:101750001092AD011092AC0106C0809100018A3058 |
:1017600009F085CF82CFBF91AF919F918F917F91EB |
:101770006F915F913F912F910F900FBE0F901F902F |
:1017800018952091A9013091AA012F5F3F4F820F38 |
:10179000931F08952091A9013091AA01821B930BF8 |
:1017A000892F992786958074992708951F920F9203 |
:1017B0000FB60F921124EF92FF920F931F932F9366 |
:1017C0003F934F935F936F937F938F939F93AF93C9 |
:1017D000BF93CF93DF93EF93FF93809105018150E7 |
:1017E000809305018F3F09F06DC083E88093B000BE |
:1017F00080918D01C82FDD27D093B101C093B00136 |
:1018000080912F05E090280580FF1EC06091EE01B9 |
:101810007091EF018091F0019091F101FF24002778 |
:10182000112720E830E040E050E00E94FF3AC80174 |
:10183000B7010E948B3A20E032E040E050E00E9485 |
:10184000FF3AC20FD31F1DC06091EE017091EF01EE |
:101850008091F0019091F101FF240027112720E8E9 |
:1018600030E040E050E00E94FF3AC801B7010E941A |
:101870008B3A20E032E040E050E00E94FF3AC21B89 |
:10188000D30BD093B101C093B0012091B00130913E |
:10189000B1018091290599272817390734F08091E3 |
:1018A0002A0599278217930724F49093B101809316 |
:1018B000B0018091B0018093B30080912B0580939B |
:1018C000050104C083E08093B0005F98FF91EF9121 |
:1018D000DF91CF91BF91AF919F918F917F916F9148 |
:1018E0005F914F913F912F911F910F91FF90EF903A |
:1018F0000F900FBE0F901F9018958091A9019091A5 |
:10190000AA010B969093B9018093B80182E085BD3E |
:1019100083EA84BD17BC88E788BD96E096BD83EC5A |
:101920008093B0009093B100E0E7F0E080818260A6 |
:101930008083EEE6F0E08081816080838AE080939E |
:10194000B3001092B20008952091A9013091AA012C |
:101950002F5F3F4F280F391F8091A9019091AA0155 |
:10196000A901481B590B57FFF7CF089510927C002F |
:101970008FEE80937A0008951F920F920FB60F9208 |
:101980001124EF92FF920F931F932F933F934F9346 |
:101990005F936F937F938F939F93AF93BF93CF93F7 |
:1019A000DF93EF93FF9310927A004091D0014F5F45 |
:1019B0004093D0014150433009F4C8C1443038F459 |
:1019C000413009F47DC0423008F01CC10DC04530E3 |
:1019D00009F4FCC1453008F4D6C1463009F41BC2F5 |
:1019E000473009F077C3FEC22091E2013091E30154 |
:1019F0008091780090917900281B390B809100012B |
:101A00008A3011F0220F331F8091BE019091BF01E7 |
:101A1000820F931F9093BF018093BE018091C801F4 |
:101A20008F5F8093C8018091120290911302A09160 |
:101A30001402B0911502442737FD4095542F820FB0 |
:101A4000931FA41FB51F8093120290931302A093BB |
:101A50001402B09315028091160290911702A09182 |
:101A60001802B0911902820F931FA41FB51F809313 |
:101A7000160290931702A0931802B0931902809156 |
:101A8000600590916105A0916205B0916305820F98 |
:101A9000931FA41FB51F8093600590936105A093C9 |
:101AA0006205B093630581E08093D1018091CE01FE |
:101AB0009091CF0101969093CF018093CE010EC3F8 |
:101AC00060917800709179008091E0019091E1013E |
:101AD000681B790B809100018A3011F0660F771F27 |
:101AE00080910A0290910B02A0910C02B0910D021C |
:101AF0009B01442737FD4095542F820F931FA41F4D |
:101B0000B51F80930A0290930B02A0930C02B0932E |
:101B10000D0280910E0290910F02A0911002B091DF |
:101B20001102820F931FA41FB51F80930E02909382 |
:101B30000F02A0931002B093110280910A029091BB |
:101B40000B02A0910C02B0910D02815F9A4BA44050 |
:101B5000B04064F080E393E9ABEFBFEF80930A02FB |
:101B600090930B02A0930C02B0930D0280910A0295 |
:101B700090910B02A0910C02B0910D0280519544FE |
:101B8000AB4FBF4F64F480ED9CE6A4E0B0E08093DF |
:101B90000A0290930B02A0930C02B0930D02809165 |
:101BA0007800909179000F9710F468E17CEF8091B4 |
:101BB000780090917900079710F460E378EF8091B6 |
:101BC000780090917900835F934010F068EE73E0A5 |
:101BD00080917800909179008A5F934010F060EDD9 |
:101BE00077E08091BC019091BD01860F971F909383 |
:101BF000BD018093BC018091C7018F5F8093C701B5 |
:101C000082E0A1C060917800709179008091DE013E |
:101C10009091DF01681B790B809100018A3011F0EF |
:101C2000660F771F8091020290910302A091040237 |
:101C3000B09105029B01442737FD4095542F820F38 |
:101C4000931FA41FB51F8093020290930302A093D9 |
:101C50000402B09305028091060290910702A091C0 |
:101C60000802B0910902820F931FA41FB51F809331 |
:101C7000060290930702A0930802B0930902809194 |
:101C8000020290910302A0910402B0910502815FCB |
:101C90009A4BA440B04064F080E393E9ABEFBFEF10 |
:101CA0008093020290930302A0930402B093050272 |
:101CB0008091020290910302A0910402B09105026A |
:101CC00080519544AB4FBF4F64F480ED9CE6A4E097 |
:101CD000B0E08093020290930302A0930402B093B9 |
:101CE000050280917800909179000F9710F468E1D7 |
:101CF0007CEF8091780090917900079710F460E371 |
:101D000078EF8091780090917900835F934010F094 |
:101D100068EE73E080917800909179008A5F93403B |
:101D200010F060ED77E08091BA019091BB01860FD1 |
:101D3000971F9093BB018093BA018091C6018F5F7A |
:101D40008093C60184E08093D101C8C1409107010E |
:101D50005091080180917800909179009A01220FAA |
:101D6000331F240F351F63E070E00E94B63A260F40 |
:101D7000371F369527953695279530930801209380 |
:101D8000070186E0E0CF8091E6019091E701209184 |
:101D9000780030917900821B930B9093C10480935B |
:101DA000C0048091C0019091C1012091C004309184 |
:101DB000C104820F931F9093C1018093C001809151 |
:101DC000CA018F5F8093CA0187E0BDCF8091780000 |
:101DD000909179002091E4013091E501821B930BF1 |
:101DE0009093CC048093CB048091C2019091C30165 |
:101DF0002091CB043091CC04820F931F9093C301A8 |
:101E00008093C2018091C9018F5F8093C901409383 |
:101E1000D10186E0E4C06091780070917900E09093 |
:101E2000E801F090E9010091EA011091EB018827A7 |
:101E300077FD8095982F0E94C939A80197010E94CB |
:101E400023390E94AC397093C5016093C40120917D |
:101E5000C4013091C501E091C004F091C1048091AA |
:101E6000CB049091CC0497FF03C0909581959F4F30 |
:101E700064E070E00E94CA3AEB01CF01F7FF03C0B3 |
:101E8000909581959F4F64E070E00E94CA3A260FBA |
:101E9000371F2C0F3D1F3093C5012093C401809143 |
:101EA000C4019091C501029704F16091E80170911D |
:101EB000E9018091EA019091EB0120E030E048E4F3 |
:101EC00054E40E94D33988230CF03CC06091E801AF |
:101ED0007091E9018091EA019091EB012AE037EDE0 |
:101EE00043EA5CE30E94243925C08091C4019091AB |
:101EF000C5018F5F9F4F34F56091E8017091E90152 |
:101F00008091EA019091EB0120E030E046E154E459 |
:101F10000E94D6391816B4F46091E8017091E90175 |
:101F20008091EA019091EB012AE037ED43EA5CE30E |
:101F30000E9423396093E8017093E9018093EA01DC |
:101F40009093EB0181E08093CB0180917800909198 |
:101F500079009093C3048093C20420911A023091B7 |
:101F60001B0240911C0250911D028091C40190916E |
:101F7000C501AA2797FDA095BA2F280F391F4A1F20 |
:101F80005B1F20931A0230931B0240931C02509354 |
:101F90001D02E0901A02F0901B0200911C021091A9 |
:101FA0001D0260911A0270911B0280911C02909197 |
:101FB0001D0220E034E040E050E00E94FF3AE21AC7 |
:101FC000F30A040B150BE0921A02F0921B02009325 |
:101FD0001C0210931D0283E08093D10187E080935F |
:101FE000D0017CC08091D0049091D10420917800E0 |
:101FF00030917900820F931F9093D1048093D00485 |
:102000008091C8048F5F8093C8048091C804853094 |
:1020100008F460C0809178009091790090930E014F |
:1020200080930D011092C8048091C4049091C5045E |
:102030002091D0043091D104821B930B209138025F |
:1020400030913902821B930B9093CD018093CC0188 |
:102050006091D0047091D104E0900901F0900A01E0 |
:1020600000910B0110910C01882777FD8095982F26 |
:10207000A8019701220F331F441F551F2E0D3F1D2E |
:10208000401F511F620F731F841F951F24E030E013 |
:1020900040E050E00E94FF3A2093090130930A018A |
:1020A00040930B0150930C012091C4043091C5045E |
:1020B0008091090190910A01A0910B01B0910C014E |
:1020C000281B390B30933902209338021092D10427 |
:1020D0001092D0041092D1011092D0018091D101C0 |
:1020E00080937C008FEE80937A00FF91EF91DF91D7 |
:1020F000CF91BF91AF919F918F917F916F915F91A0 |
:102100004F913F912F911F910F91FF90EF900F9062 |
:102110000FBE0F901F901895CF93DF93A3E0B0E010 |
:102120000E941A3B802DC82FDD27C531D10508F04C |
:102130002A97C7BD84E690E00E94A40C80910D010F |
:1021400090910E0182559340D0F4C0E0D0E017C0CA |
:10215000C7BD82E390E00E94A40C85E591E09F93C7 |
:102160008F931F920E942B0880910D0190910E0178 |
:102170000F900F900F908458934020F02196CA3F03 |
:10218000D10530F3A3E0B0E00C2E0E94223BC093B7 |
:10219000CD048CE291E00E94A40CDF91CF910895D0 |
:1021A000E9E1F1E080E2819391E0E936F907D9F7BE |
:1021B0000895FF920F931F938091D501282F332705 |
:1021C000C90181709070682F882391F08091D601A9 |
:1021D000882311F0815002C0809169018093D6015B |
:1021E000E9E1F1E080E2819391E0E936F907D9F77E |
:1021F000A9014270507021FF0DC08091D6018F5F00 |
:102200008093D601E9E1F1E080E2819391E0E93643 |
:10221000F907D9F7662321F0452B11F01092D6016A |
:1022200081E18093D4018091D60199279F938F9368 |
:1022300082ED93E09F938F9311E0F12EFF920E9425 |
:102240002B080091D6010F900F900F900F900F90D8 |
:10225000053009F4F8C1063090F4023009F4C8C022 |
:10226000033030F40023F1F0013009F07CC35DC08D |
:10227000033009F412C1043009F075C361C108309C |
:1022800009F4B9C2093038F4063009F432C2073013 |
:1022900009F069C38DC2093009F4EAC20A3009F0B5 |
:1022A00062C324C31092D40180EC93E09F938F9378 |
:1022B000FF920E942B0884E18093D40120910001B9 |
:1022C00082E090E09F938F931F921F92822F6AE08B |
:1022D0000E94AA3A892F99279F938F93822F0E9459 |
:1022E000AA3A99279F938F938DEA93E09F938F93B8 |
:1022F000FF920E942B0888E28093D4010E9466021C |
:1023000099279F938F9380EA93E09F938F93FF92F7 |
:102310000E942B088CE38093D40180E993E09F9383 |
:102320008F93FF920E942B08B4C080910E0580FF0E |
:1023300047C01092D40180913802909139029F9346 |
:102340008F9381E893E09F938F930F930E942B08C4 |
:1023500084E18093D40180913A0290913B029F9353 |
:102360008F9382E793E09F938F930F930E942B08A4 |
:1023700088E28093D40180910D0190910E019F938A |
:102380008F9383E693E09F938F930F930E942B0884 |
:102390008CE38093D4018091CD0499279F938F93F0 |
:1023A00084E593E09F938F930F930E942B088DB742 |
:1023B0009EB744960FB6F8949EBF0FBE8DBFD8C28D |
:1023C00084E18093D4018DE493E09F938F930F93E6 |
:1023D0000E942B0888E28093D4018FE393E09F93BF |
:1023E0008F930F930E942B088DB79EB70696E2CF6E |
:1023F0001092D40185E393E09F938F93FF920E9404 |
:102400002B0884E18093D4016091EE017091EF017B |
:102410008091F0019091F10120E034E040E050E043 |
:102420000E94FF3A5F934F933F932F9386E293E08E |
:102430009F938F93FF920E942B0888E28093D40190 |
:102440006091F6017091F7018091F8019091F90186 |
:1024500020E034E040E050E00E94FF3A5F934F9369 |
:102460003F932F9387E193E09F938F93FF920E9476 |
:102470002B088CE38093D40180911E0290911F025F |
:102480009F938F9388E093E09F938F93FF920E9496 |
:102490002B088DB79EB746968DCF1092D4018091B0 |
:1024A000DE049091DF042091DC043091DD049F93E1 |
:1024B0008F933F932F9388EF92E09F938F93FF9298 |
:1024C0000E942B0884E18093D4018091E2049091D2 |
:1024D000E3042091E0043091E1049F938F933F93B4 |
:1024E0002F9388EE92E09F938F93FF920E942B0888 |
:1024F00088E28093D4018091E6049091E7042091D2 |
:10250000E4043091E5049F938F933F932F9388EDDC |
:1025100092E09F938F93FF920E942B088CE380930D |
:10252000D4018091EA049091EB042091E804309169 |
:10253000E9049F938F933F932F9388EC92E07AC0A6 |
:102540001092D401E0910705FF27EE0FFF1FE6521E |
:10255000FB4F20813181E0910605FF27EE0FFF1F21 |
:10256000E652FB4F808191813F932F939F938F93EE |
:1025700088EB92E09F938F93FF920E942B0884E157 |
:102580008093D401E0910905FF27EE0FFF1FE6526B |
:10259000FB4F20813181E0910805FF27EE0FFF1FDF |
:1025A000E652FB4F808191813F932F939F938F93AE |
:1025B00088EA92E09F938F93FF920E942B0888E213 |
:1025C0008093D401E0910B05FF27EE0FFF1FE65229 |
:1025D000FB4F20813181E0910A05FF27EE0FFF1F9D |
:1025E000E652FB4F808191813F932F939F938F936E |
:1025F00088E992E09F938F93FF920E942B088CE3CF |
:102600008093D401E0910D05FF27EE0FFF1FE652E6 |
:10261000FB4F20813181E0910C05FF27EE0FFF1F5A |
:10262000E652FB4F808191813F932F939F938F932D |
:1026300088E892E09F938F93FF920E942B088DB7BA |
:102640009EB74C96B7CE1092D4018AE792E09F9342 |
:102650008F93FF920E942B0884E18093D4012091F4 |
:10266000DE013091DF018091BA019091BB01609150 |
:10267000C6013F932F9377270E94CA3A7F936F93A7 |
:102680008BE692E09F938F93FF920E942B0888E243 |
:102690008093D4012091E0013091E1018091BC014F |
:1026A0009091BD016091C7013F932F9377270E94BE |
:1026B000CA3A7F936F938CE592E09F938F93FF923A |
:1026C0000E942B088CE38093D4012091E201309189 |
:1026D000E3018091BE019091BF016091C8013F93D9 |
:1026E0002F9377270E94CA3A7F936F938DE492E0ED |
:1026F00056C01092D40180E492E09F938F93FF9292 |
:102700000E942B0884E18093D4012091E401309150 |
:10271000E5018091C2019091C3016091C9013F938D |
:102720002F9377270E94CA3A7F936F9381E392E0B9 |
:102730009F938F93FF920E942B0888E28093D4018D |
:102740002091E6013091E7018091C0019091C10193 |
:102750006091CA013F932F9377270E94CA3A7F93D3 |
:102760006F9382E292E09F938F93FF920E942B08D7 |
:102770008CE38093D4016091E8017091E90180912C |
:10278000EA019091EB010091C2041091C3040E94F0 |
:10279000AC397F936F931F930F9383E192E09F93E4 |
:1027A0008F93FF920E942B088DB79EB7489602CE5A |
:1027B00084E18093D40180910701909108019F9357 |
:1027C0008F9384E092E09F938F93FF920E942B0857 |
:1027D00088E28093D4018091300299279F938F9350 |
:1027E00085EF91E09F938F93FF920E942B088DB706 |
:1027F0009EB70A96DFCD1092D40186EE91E09F93AA |
:102800008F93FF920E942B0884E18093D4018091E2 |
:102810002202909123029F938F9387ED91E09F93E3 |
:102820008F93FF920E942B0888E28093D4018091BD |
:102830001E0290911F029F938F9388EC91E09F93CB |
:102840008F93FF920E942B088CE38093D401809198 |
:102850002002909121029F938F9389EB91E09F93A7 |
:102860008F93FF920E942B088DB79EB74296A2CD00 |
:102870001092D40180912802909129029F938F9306 |
:102880008DEA91E09F938F93FF920E942B0884E141 |
:102890008093D40180912A0290912B029F938F9371 |
:1028A00081EA91E09F938F93FF920E942B0888E228 |
:1028B0008093D40180912C0290912D029F938F934D |
:1028C00085E991E09F938F93FF920E942B088CE300 |
:1028D0008093D40180912E0290912F029F938F9329 |
:1028E00089E891E09F938F93FF925FCD1092D4017E |
:1028F00081E891E09F938F93FF920E942B0884E1DF |
:102900008093D40180918D0199279F938F9383E7C2 |
:1029100091E09F938F93FF920E942B0888E280930F |
:10292000D4018091B0019091B1019F938F9385E67E |
:1029300091E09F938F93FF920E942B088CE38093EA |
:10294000D40180912A0599279F938F93809129051F |
:1029500099279F938F9387E591E09F938F93FF92A1 |
:102960000E942B0824CD0150009369011092D601DA |
:102970001092D5011F910F91FF9008951092B90008 |
:102980008AE28093B800089585EA8093BC0080E0D5 |
:1029900090E0089584E98093BC0008951092B900F6 |
:1029A0008093BB0085E88093BC0080E090E00895B0 |
:1029B0001F920F920FB60F9211248F939F93EF9354 |
:1029C000FF938091D7018F5F8093D701815083302F |
:1029D000A9F1843028F4813091F0823008F50AC0E2 |
:1029E000853089F18530B8F18630A9F1873009F05A |
:1029F00061C045C08091D801880F8E5A09C080916E |
:102A0000D8018F5F8093D801815027C080919302B5 |
:102A10001092B9008093BB0085E88093BC004AC047 |
:102A200084E98093BC008091D801843018F410921E |
:102A3000D70102C01092D80185EAEFCF8091D90169 |
:102A4000880F8D5AE5CF8091BB00E091D901FF2717 |
:102A5000EE52FB4F80838091D901813039F0813073 |
:102A6000A8F2823031F0833029F506C080919402BB |
:102A7000CFCF80919702CCCF80919902C9CF80911E |
:102A8000D9019091BB00E82FFF27EE52FB4F9483B2 |
:102A90008F5F8093D901843010F01092D90184E9BE |
:102AA0008093BC008AE090E090937B0180937A0150 |
:102AB0001092D7018091BC0080688093BC00FF9188 |
:102AC000EF919F918F910F900FBE0F901F901895CF |
:102AD0004CEB50E084E9DA018C931092D7012BEB98 |
:102AE00030E0F90180811092D80180E88C93109237 |
:102AF000BD001092BA001082E9EBF0E01082A8EB62 |
:102B0000B0E01C9210828AE28C9385EADA018C9301 |
:102B10001082F901108285E88C93089583EC8093EC |
:102B20008100EFE6F0E08081806280831092E30113 |
:102B30001092E2011092E1011092E0011092DF0187 |
:102B40001092DE0108951F920F920FB60F9211247A |
:102B50000F931F932F933F934F935F936F937F93A5 |
:102B60008F939F93AF93BF93CF93DF93EF93FF9395 |
:102B700020918600309187008091DC019091DD01E9 |
:102B8000281B390B80918600909187009093DD017E |
:102B90008093DC01C9018D5D95408356994148F4CD |
:102BA00081E090E09093DB018093DA0110926A015A |
:102BB00067C0C091DA01D091DB01CA30D1050CF0B9 |
:102BC0005FC0C9018B5F9040845B914008F040C0BA |
:102BD000A901425D5140FE01EE0FFF1FE652FB4F7F |
:102BE00080819181FA01E81BF90BCF01F7FF03C047 |
:102BF000909581959F4F06974CF480913002883CC8 |
:102C000028F480913002865F80933002FE01EE0F3F |
:102C1000FF1F8F0106521B4FD8012D913C91C90116 |
:102C2000880F991F820F931F840F951F64E070E037 |
:102C30000E94CA3AD8018D919C9111979B01281B43 |
:102C4000390BE051FB4F3183208311967C936E93B7 |
:102C5000FE013196F093DB01E093DA01E530F105F6 |
:102C600019F45D9A5C980BC05D98E630F10511F49B |
:102C70005C9A05C05C98379711F45B9A01C05B9829 |
:102C8000FF91EF91DF91CF91BF91AF919F918F9184 |
:102C90007F916F915F914F913F912F911F910F9174 |
:102CA0000F900FBE0F901F901895AF92BF92CF92CA |
:102CB000DF92EF92FF920F931F9310927A00809110 |
:102CC000C601882369F08091BA019091BB0160919F |
:102CD000C60177270E94CA3A709343056093420564 |
:102CE0008091C701882369F08091BC019091BD015A |
:102CF0006091C70177270E94CA3A7093410560939B |
:102D000040058091C801882369F08091BE019091AF |
:102D1000BF016091C80177270E94CA3A7093590594 |
:102D2000609358058091C9018823D9F1E09051053D |
:102D3000F09052056091C2017091C3012091C901C8 |
:102D40000027F7FC0095102F5701680183E0AA0CBB |
:102D5000BB1CCC1CDD1C8A95D1F7AE18BF08C00A7D |
:102D6000D10A882777FD8095982FB4E0660F771FEA |
:102D7000881F991FBA95D1F73327442755270E94FA |
:102D8000FF3AA20EB31EC41ED51EC601B50128E02F |
:102D900030E040E050E00E94FF3A3093520520932B |
:102DA00051058091CA018823D9F1E0905E05F09029 |
:102DB0005F056091C0017091C1012091CA01002797 |
:102DC000F7FC0095102F57016801A3E0AA0CBB1C6B |
:102DD000CC1CDD1CAA95D1F7AE18BF08C00AD10AD9 |
:102DE000882777FD8095982FF4E0660F771F881F5E |
:102DF000991FFA95D1F73327442755270E94FF3AA8 |
:102E0000A20EB31EC41ED51EC601B50128E030E0D7 |
:102E100040E050E00E94FF3A30935F0520935E054A |
:102E20008091CB018823A1F1E0904705F0904805FF |
:102E30006091C4017091C5012091CB010027F7FC7E |
:102E40000095102F57016801E3E0AA0CBB1CCC1CB5 |
:102E5000DD1CEA95D1F7AE18BF08C00AD10A882751 |
:102E600077FD8095982F3327442755270E94FF3AF6 |
:102E7000A20EB31EC41ED51EC601B50128E030E067 |
:102E800040E050E00E94FF3A309348052093470508 |
:102E90001092BB011092BA011092C6011092BD01AE |
:102EA0001092BC011092C7011092BF011092BE0196 |
:102EB0001092C8011092C1011092C0011092CA0173 |
:102EC0001092C3011092C2011092C9011092C50163 |
:102ED0001092C4011092CB018091120290911302C2 |
:102EE000A0911402B09115028093FE019093FF010E |
:102EF000A0930002B093010280910202909103021C |
:102F0000A0910402B09105028093EE019093EF012D |
:102F1000A093F001B093F10180910A0290910B020D |
:102F2000A0910C02B0910D028093F6019093F701ED |
:102F3000A093F801B093F9018091060290910702E5 |
:102F4000A0910802B09109028093F2019093F301DD |
:102F5000A093F401B093F50180910E0290910F02BD |
:102F6000A0911002B09111028093FA019093FB019D |
:102F7000A093FC01B093FD018FEE80937A00209125 |
:102F800028023091290280910A05E82FFF27EE0FD1 |
:102F9000FF1FE652FB4F8081918182599F4F281776 |
:102FA00039071CF42F5F3F4F0CC0808191818259FB |
:102FB0009F4F821793074CF42115310531F02150B2 |
:102FC0003040309329022093280220912A02309128 |
:102FD0002B0280910B05E82FFF27EE0FFF1FE65213 |
:102FE000FB4F8081918182599F4F281739071CF42C |
:102FF0002F5F3F4F0CC08081918182599F4F821774 |
:1030000093074CF42115310531F0215030403093B5 |
:103010002B0220932A0220912C0230912D028091C4 |
:103020000C05E82FFF27EE0FFF1FE652FB4F8081B4 |
:10303000918182599F4F281739071CF42F5F3F4F0A |
:103040000CC08081918182599F4F821793074CF465 |
:103050002115310531F02150304030932D0220935D |
:103060002C0220912E0230912F0280910D05E82F25 |
:10307000FF27EE0FFF1FE652FB4F8081918182599F |
:103080009F4F281739071CF42F5F3F4F0CC08081DA |
:10309000918182599F4F821793074CF42115310576 |
:1030A00031F02150304030932F0220932E02809136 |
:1030B00028029091290297FF05C0109229021092D0 |
:1030C00028020AC08F3F910539F034F08FEF90E06D |
:1030D000909329028093280280912A0290912B02DA |
:1030E00097FF05C010922B0210922A020AC08F3F50 |
:1030F000910539F034F08FEF90E090932B0280939C |
:103100002A0280912C0290912D0297FF05C0109207 |
:103110002D0210922C020AC08F3F910539F034F035 |
:103120008FEF90E090932D0280932C0280912E02DD |
:1031300090912F0297FF05C010922F0210922E023D |
:103140000AC08F3F910539F034F08FEF90E09093F3 |
:103150002F0280932E021F910F91FF90EF90DF902E |
:10316000CF90BF90AF90089510927A008091C601E1 |
:10317000882369F08091BA019091BB016091C601EA |
:1031800077270E94CA3A7093430560934205809165 |
:10319000C701882369F08091BC019091BD016091C5 |
:1031A000C70177270E94CA3A709341056093400592 |
:1031B0008091C801882369F08091BE019091BF0180 |
:1031C0006091C80177270E94CA3A709359056093AD |
:1031D00058058091C9018823D1F06091C201709196 |
:1031E000C3012091C901882777FD8095982FF4E0CD |
:1031F000660F771F881F991FFA95D1F73327442749 |
:1032000055270E94FF3A3093520520935105809133 |
:10321000CA018823D1F06091C0017091C101209151 |
:10322000CA01882777FD8095982FE4E0660F771F05 |
:10323000881F991FEA95D1F73327442755270E9405 |
:10324000FF3A30935F0520935E058091CB01882380 |
:1032500099F06091C4017091C5012091CB0188273C |
:1032600077FD8095982F3327442755270E94FF3AF2 |
:1032700030934805209347051092BB011092BA0184 |
:103280001092C6011092BD011092BC011092C701AC |
:103290001092BF011092BE011092C8011092C1019C |
:1032A0001092C0011092CA011092C3011092C20183 |
:1032B0001092C9011092C5011092C4011092CB0165 |
:1032C0008FEE80937A00209128023091290280911C |
:1032D0000A05E82FFF27EE0FFF1FE652FB4F808104 |
:1032E000918182599F4F281739071CF42F5F3F4F58 |
:1032F0000CC08081918182599F4F821793074CF4B3 |
:103300002115310531F021503040309329022093AE |
:10331000280220912A0230912B0280910B05E82F80 |
:10332000FF27EE0FFF1FE652FB4F808191818259EC |
:103330009F4F281739071CF42F5F3F4F0CC0808127 |
:10334000918182599F4F821793074CF421153105C3 |
:1033500031F02150304030932B0220932A022091EB |
:103360002C0230912D0280910C05E82FFF27EE0FE3 |
:10337000FF1FE652FB4F8081918182599F4F281792 |
:1033800039071CF42F5F3F4F0CC080819181825917 |
:103390009F4F821793074CF42115310531F02150CE |
:1033A000304030932D0220932C0220912E02309138 |
:1033B0002F0280910D05E82FFF27EE0FFF1FE65229 |
:1033C000FB4F8081918182599F4F281739071CF448 |
:1033D0002F5F3F4F0CC08081918182599F4F821790 |
:1033E00093074CF42115310531F0215030403093D2 |
:1033F0002F0220932E02809128029091290297FF9C |
:1034000005C010922902109228020AC08F3F910530 |
:1034100039F034F08FEF90E09093290280932802E6 |
:1034200080912A0290912B0297FF05C010922B02E7 |
:1034300010922A020AC08F3F910539F034F08FEFC5 |
:1034400090E090932B0280932A0280912C0290911D |
:103450002D0297FF05C010922D0210922C020AC077 |
:103460008F3F910539F034F08FEF90E090932D026B |
:1034700080932C0280912E0290912F0297FF05C01D |
:1034800010922F0210922E0208958F3F910539F06D |
:1034900034F08FEF90E090932F0280932E020895E6 |
:1034A0001F93809111058B3F98F08B3F19F4809109 |
:1034B00028020EC08C3F19F480912A0209C08D3F6A |
:1034C00019F480912C0204C08E3F21F480912E02C9 |
:1034D0008093850180918501882319F410928501DC |
:1034E00004C08F3F11F480938501809110058B3FBC |
:1034F00098F08B3F19F4809128020EC08C3F19F48C |
:1035000080912A0209C08D3F19F480912C0204C0D9 |
:103510008E3F21F480912E0280938401809184015A |
:10352000882319F41092840105C0843618F084E6CB |
:1035300080938401809112058B3F98F08B3F19F4A2 |
:10354000809128020EC08C3F19F480912A0209C094 |
:103550008D3F19F480912C0204C08E3F21F480919C |
:103560002E028093860180918601882319F410929F |
:10357000860105C0843618F084E680938601809128 |
:1035800014058B3F98F08B3F19F4809128020EC0F0 |
:103590008C3F19F480912A0209C08D3F19F4809163 |
:1035A0002C0204C08E3F21F480912E02809387016B |
:1035B00080918701882319F41092870104C08F3FFE |
:1035C00011F48093870180911B058B3F98F08B3F0E |
:1035D00019F4809128020EC08C3F19F480912A02C0 |
:1035E00009C08D3F19F480912C0204C08E3F21F454 |
:1035F00080912E028093880180918801882319F49C |
:103600001092880104C08F3F11F48093880180914B |
:103610001C058B3F98F08B3F19F4809128020EC057 |
:103620008C3F19F480912A0209C08D3F19F48091D2 |
:103630002C0204C08E3F21F480912E0280938901D8 |
:10364000809189018B3010F48AE002C08F3F11F421 |
:103650008093890180911D058B3F98F08B3F19F471 |
:10366000809128020EC08C3F19F480912A0209C073 |
:103670008D3F19F480912C0204C08E3F21F480917B |
:103680002E0280938A0180918A01882319F4109276 |
:103690008A0104C08F3F11F480938A018091220532 |
:1036A0008B3F98F08B3F19F4809128020EC08C3F1D |
:1036B00019F480912A0209C08D3F19F480912C02DF |
:1036C00004C08E3F21F480912E0280938C01809162 |
:1036D0008C01882319F410928C0104C08F3F11F4DF |
:1036E00080938C01809123058B3F98F08B3F19F4D8 |
:1036F000809128020EC08C3F19F480912A0209C0E3 |
:103700008D3F19F480912C0204C08E3F21F48091EA |
:103710002E0280933E0280913E02882319F410927B |
:103720003E0204C08F3F11F480933E028091240535 |
:103730008B3F98F08B3F19F4809128020EC08C3F8C |
:1037400019F480912A0209C08D3F19F480912C024E |
:1037500004C08E3F21F480912E0280933F0280911D |
:103760003F02882319F410923F0204C08F3F11F4E6 |
:1037700080933F02809125058B3F98F08B3F19F491 |
:10378000809128020EC08C3F19F480912A0209C052 |
:103790008D3F19F480912C0204C08E3F21F480915A |
:1037A0002E028093400280914002882319F41092E7 |
:1037B000400204C08F3F11F480934002809126059F |
:1037C0008B3F98F08B3F19F4809128020EC08C3FFC |
:1037D00019F480912A0209C08D3F19F480912C02BE |
:1037E00004C08E3F21F480912E028093410280918B |
:1037F0004102882319F41092410204C08F3F11F452 |
:1038000080934102909127059B3FB0F09B3F19F4B4 |
:103810008091280204C09C3F29F480912A02809361 |
:103820008D010CC09D3F19F480912C02F8CF9E3F72 |
:1038300029F480912E02F3CF90938D0180918D0118 |
:10384000882319F410928D0104C08F3F11F48093E6 |
:103850008D019B3FB0F09B3F19F48091280204C07A |
:103860009C3F29F480912A0280938D010CC09D3FDA |
:1038700019F480912C02F8CF9E3F29F480912E02FA |
:10388000F3CF90938D0180918D01882319F41092CC |
:103890008D0104C08F3F11F480938D019B3FB0F0E8 |
:1038A0009B3F19F48091280204C09C3F29F4809129 |
:1038B0002A0280938D010CC09D3F19F480912C0247 |
:1038C000F8CF9E3F29F480912E02F3CF90938D0183 |
:1038D00080918D01882319F410928D0104C08F3FCF |
:1038E00011F480938D0180912C058B3F98F08B3FD4 |
:1038F00019F4809128020EC08C3F19F480912A029D |
:1039000009C08D3F19F480912C0204C08E3F21F430 |
:1039100080912E0280938E0180918E01882319F46C |
:1039200010928E0104C08F3F11F480938E0110918C |
:103930008C01612F772767FD7095872F972F0E9445 |
:10394000C93917FF06C020E030E040E853E40E9488 |
:10395000243927E137EB41ED58E30E94433A609365 |
:103960008001709381018093820190938301809103 |
:1039700019058093570580911805809344051F9180 |
:1039800008951F93182F0EC080913702882361F489 |
:1039900084E690E09093AF018093AE018AEF90E0CF |
:1039A0000E94A40C115080F71F91089581E080932C |
:1039B000060532E03093070583E08093080584E034 |
:1039C0008093090545E040930A0586E080930B0546 |
:1039D00087E080930C0588E080930D0510920E051A |
:1039E0008EE180930F058BEF809311058AE0809321 |
:1039F000120522E32093100520931405309313053C |
:103A0000309315051092160550E1509317058FE07D |
:103A1000809318058AEF809319058AE180931A052F |
:103A200080E480931B058FEA80931C0580931D051D |
:103A300094E690931E0590931F058CE380932005D8 |
:103A400010922105409322058CE08093230530934A |
:103A5000240550932505109226059093270588E2AA |
:103A60008093280510922F052093290586E98093DD |
:103A70002A0540932B0520932C058AE580932D057C |
:103A800010922E05A4E3B5E0EBE6F1E08CE00190A6 |
:103A90000D928150E1F7089581E08093060532E0B0 |
:103AA0003093070583E08093080594E0909309051F |
:103AB00065E060930A0586E080930B0587E08093BC |
:103AC0000C0558E050930D0510920E058EE1809381 |
:103AD0000F058BEF809311058AE08093120522E396 |
:103AE000209310052093140590931305309315052A |
:103AF0009093160580E1809317058FE08093180559 |
:103B00008AEF809319058AE180931A0580E88093F3 |
:103B10001B0588E780931C0546E940931D0594E644 |
:103B200090931E0590931F058CE3809320051092BF |
:103B300021051092220550932305309324058CE033 |
:103B400080932505109226059093270588E280939F |
:103B5000280510922F052093290540932A0560938C |
:103B60002B0520932C058AE580932D0510922E05B8 |
:103B7000A4E3B5E0E3E7F1E08CE001900D92815021 |
:103B8000E1F7089580913702882301F5109294029D |
:103B900010929302109297021092990280919A01CA |
:103BA000882311F08093930280919B01882311F068 |
:103BB0008093940280919C01882311F08093990254 |
:103BC00080919D01882311F0809397028091930248 |
:103BD0009927909398048093970480919402992751 |
:103BE00090939A04809399048091990299279093D5 |
:103BF0009C0480939B0480919702992790939E0444 |
:103C000080939D041092D7011092D8010E94C41491 |
:103C10000895CF93DF931092E5011092E401109282 |
:103C2000E7011092E60180E090E0A0E0B0E0809330 |
:103C3000E8019093E901A093EA01B093EB0110929F |
:103C4000DF011092DE011092E1011092E00110926A |
:103C5000E3011092E2010E94D42E0E94B41885E084 |
:103C600090E00E94C10BEC01CE010E94CA0B882398 |
:103C7000D9F30E94B41880910E0580FF10C0809186 |
:103C80000D0190910E01875B934038F480910D01F6 |
:103C900090910E018E5E924010F40E948C108091E3 |
:103CA00000018A3041F5809142059091430597FFCC |
:103CB00003C0909581959F4F9093DF018093DE0123 |
:103CC000809140059091410597FF03C090958195A3 |
:103CD0009F4F9093E1018093E0018091580590916E |
:103CE000590597FF03C0909581959F4F9093E301ED |
:103CF0008093E20133C0809142059091430597FF84 |
:103D000003C0909581959F4F62E070E00E94CA3A8F |
:103D10007093DF016093DE01809140059091410531 |
:103D200097FF03C0909581959F4F62E070E00E94DD |
:103D3000CA3A7093E1016093E00180915805909137 |
:103D4000590597FF03C0909581959F4F62E070E001 |
:103D50000E94CA3A7093E3016093E20186E092E028 |
:103D60009093E5018093E40184E092E09093E70171 |
:103D70008093E6016091C2047091C304882777FDA7 |
:103D80008095982F0E94C9396093E8017093E901EA |
:103D90008093EA019093EB011092020210920302C9 |
:103DA000109204021092050210920602109207026D |
:103DB000109208021092090210920A0210920B024D |
:103DC00010920C0210920D0210920E0210920F022D |
:103DD000109210021092110210921202109213020D |
:103DE000109214021092150210924305109242058F |
:103DF00010924105109240051092590510925805F5 |
:103E00008091090190910A01A0910B01B0910C01E0 |
:103E10009093C5048093C4041092CD011092CC01FC |
:103E200010921A0210921B0210921C0210921D0294 |
:103E300080911E0290911F02909321028093200294 |
:103E400082E390E09093AF018093AE0120911E0237 |
:103E500030911F0282EE94E0AC01249FC001259FA7 |
:103E6000900D349F900D1124AA2797FDA095BA2F8D |
:103E70008093600590936105A0936205B0936305FC |
:103E80008EE190E0909366028093650290936402C5 |
:103E900080936302DF91CF9108954F925F926F926A |
:103EA0007F928F929F92AF92BF92CF92DF92EF92CA |
:103EB000FF920F931F93CF93DF930E94551680912B |
:103EC000D7059091D805009729F001979093D805D0 |
:103ED0008093D7050E94A02F892B39F4809100018F |
:103EE0008A3011F4289A01C02898299AE09108058F |
:103EF000FF27EE0FFF1FE652FB4F0190F081E02DF0 |
:103F0000E858FF4F10927A00209107013091080184 |
:103F100080911E05992702974091420250914302D9 |
:103F200082179307B4F122E04D3B52071CF1109227 |
:103F300043021092420200916302109164022091A8 |
:103F4000650230916602C901880F991F820F931F85 |
:103F5000880F991F880F991F6FE070E00E94CA3A7E |
:103F6000601771076CF401501040109364020093C5 |
:103F7000630206C04F5F5F4F50934302409342027B |
:103F800020916302309164022E173F07F4F19F01E4 |
:103F90003CC063E0493E5607BCF020916502309179 |
:103FA0006602C901B3E0880F991FBA95E1F7820F45 |
:103FB000931F8E0F9F1F6AE070E00E94CA3A7093B1 |
:103FC00066026093650219C0CA010196909343028C |
:103FD000809342026AE070E00E94CA3A892B89F419 |
:103FE00080916302909164028E179F0734F40196CA |
:103FF000909364028093630204C0F0936402E093A0 |
:10400000630220916302309164028FEE80937A0004 |
:10401000390137FF02C0662477248091300284364C |
:1040200008F05BC080910201882399F4809103011C |
:10403000909104018F5F9F4F61F488E99AE3909318 |
:10404000AF018093AE0180E09CE0909304018093E7 |
:10405000030180914D0290914E02009731F001973B |
:1040600090934E0280934D0204C01092370210923A |
:104070002402809100018A3011F4289A01C0289806 |
:104080008091480290914902815D974018F180919A |
:104090001F05682E772481E080932402E0910605B5 |
:1040A000FF27EE0FFF1FE652FB4F11821082E091B7 |
:1040B0000705FF27EE0FFF1FE652FB4F118210820C |
:1040C000E0910905FF27EE0FFF1FE652FB4F11821B |
:1040D0001082DDC110923702DAC1809130028D3832 |
:1040E00008F4D5C1109224028091200522E3829F1A |
:1040F000C001112490934E0280934D02F9E26F1695 |
:1041000071046CF080914802909149022FEF8F3F2B |
:10411000920781F101969093490280934802809121 |
:10412000480290914902883C910520F048E26416CB |
:10413000710404F510925F02109260021092610205 |
:104140001092620210925B0210925C0210925D0269 |
:1041500010925E0210921202109213021092140238 |
:104160001092150210921602109217021092180265 |
:104170001092190259EC651671040CF4E9C0809193 |
:104180003702882309F083C1E0910905FF27EE0F6C |
:10419000FF1FE652FB4F808191818C3491050CF416 |
:1041A000D4C080914C028F5F80934C02893C08F40C |
:1041B0006EC129980E94091E1092370210924C027B |
:1041C000109249021092480280910605282F332749 |
:1041D000F901EE0FFF1FE652FB4F8081918187347A |
:1041E00091059CF4E0910705FF27EE0FFF1FE652B3 |
:1041F000FB4F0190F081E02DF7FF03C0F095E195B2 |
:10420000FF4FE734F1050CF46BC080910705C82F10 |
:10421000DD27DE01AA0FBB1FA652BB4F8D919C91DB |
:104220001197873491053CF0F901EE0FFF1FE6521C |
:10423000FB4F808191818D919C918734910564F031 |
:10424000F901EE0FFF1FE652FB4F80819181873409 |
:10425000910514F042E001C041E0FE01EE0FFF1FA6 |
:10426000E652FB4F80819181863491055CF4F9011F |
:10427000EE0FFF1FE652FB4F80819181873491053D |
:104280000CF043E0FE01EE0FFF1FE652FB4F808172 |
:1042900091818A5B9F4F5CF4F901EE0FFF1FE6529C |
:1042A000FB4F80819181873491050CF044E0CC0F65 |
:1042B000DD1FC652DB4F888199818A5B9F4F5CF47A |
:1042C000220F331F26523B4FF901808191818634A2 |
:1042D00091050CF445E0A2E0B0E0042E0E94223BE0 |
:1042E0000E9466024AE366E075E00E948D020E9429 |
:1042F00066020E94C11C80910E0580FF10C0809153 |
:104300000D0190910E01875B934038F480910D016F |
:1043100090910E018E5E924010F40E948C100E94CB |
:10432000F32F8091B905882309F4B1C088EE93E09A |
:104330000E94A40C80ED97E09093AF018093AE01B2 |
:1043400084EF91E00E94A40CA2C010924C029FC086 |
:1043500043E2641671040CF09AC080910905C82FDD |
:10436000DD27FE01EE0FFF1FE652FB4F808191819A |
:10437000855B9F4F0CF06DC080914B028F5F8093E7 |
:104380004B02893C08F467C088EC80934B0281E0C3 |
:1043900090E0909349028093480281E08093370235 |
:1043A00010925702109258021092590210925A021B |
:1043B000109212021092130210921402109215021F |
:1043C00010921602109217021092180210921902FF |
:1043D000109202021092030210920402109205023F |
:1043E00010920A0210920B0210920C0210920D020F |
:1043F0008091EE019091EF01A091F001B091F10157 |
:104400008093060290930702A0930802B0930902DA |
:104410008091F6019091F701A091F801B091F90116 |
:1044200080930E0290930F02A0931002B09311029A |
:1044300010925F021092600210926102109262026A |
:1044400010925B0210925C0210925D0210925E026A |
:1044500002C010924B02CC0FDD1FC652DB4F888189 |
:1044600099818C3491058CF080914A028F5F809302 |
:104470004A02893C60F01092370288EC80934A022D |
:10448000109249021092480202C010924A02809192 |
:104490006A01815080936A0180916A018F3F29F0FF |
:1044A00080912402882309F4BCC10E94501AE09133 |
:1044B0000605FF27EE0FFF1FDF01A652BB4F4D91F0 |
:1044C0005C9180911505C82FDD27E051FB4F80815D |
:1044D00091812091160533274C9F50014D9FB00CC0 |
:1044E0005C9FB00C1124BC01629FC001639F900DC2 |
:1044F000729F900D1124A80EB91EB0923202A092A4 |
:104500003102E0910705FF27EE0FFF1FDF01A652E2 |
:10451000BB4F4D915C91E051FB4F808191814C9F4D |
:1045200040014D9F900C5C9F900C1124FC01E29F78 |
:10453000C001E39F900DF29F900D1124880E991EEB |
:104540009092340280923302E0910905FF27EE0F2A |
:10455000FF1FE652FB4F80819181909581959F4F7F |
:10456000909336028093350210918901612F77274D |
:1045700067FD7095872F972F0E94C93917FF06C0D6 |
:1045800020E030E040E853E40E94243920E030E0AD |
:1045900040E251E40E94243920E030E040E85BE34F |
:1045A0000E94433A6B017C0160935A0570935B054E |
:1045B00080935C0590935D0510918A01612F7727A8 |
:1045C00067FD7095872F972F0E94C93917FF06C086 |
:1045D00020E030E040E853E40E94243920E030EE4F |
:1045E0004BE257E40E94663960934B0570934C058B |
:1045F00080934D0590934E0580910E0582FF0CC06F |
:1046000080E090E0A0E0B0E080934B0590934C05F3 |
:10461000A0934D05B0934E0520E030E040E050E01F |
:10462000C701B6010E94D339882364F480E090E08A |
:10463000A0E0B0E080935A0590935B05A0935C05E1 |
:10464000B0935D0520E030E040E050E060914B0524 |
:1046500070914C0580914D0590914E050E94D33983 |
:10466000882364F480E090E0A0E0B0E080934B0504 |
:1046700090934C05A0934D05B0934E0580912E0567 |
:10468000992782FDCEC083FDCCC08091EE01909130 |
:10469000EF01A091F001B091F10181569A4EA04036 |
:1046A000B04044F1CE0173E0880F991F7A95E1F78D |
:1046B000A501481B590B509332024093310280915F |
:1046C000EE019091EF01A091F001B091F1018158BC |
:1046D0009843A140B0400CF43FC0CE0164E0880F85 |
:1046E000991F6A95E1F7481B590B5093320240938A |
:1046F000310232C08091EE019091EF01A091F00162 |
:10470000B091F101805A9541AF4FBF4F2CF59E01FA |
:1047100053E0220F331F5A95E1F72A0D3B1D3093CA |
:104720003202209331028091EE019091EF01A0912D |
:10473000F001B091F10181589843A140B04064F07C |
:10474000CE0144E0880F991F4A95E1F7281B390BE9 |
:1047500030933202209331028091F6019091F7015B |
:10476000A091F801B091F90181569A4EA040B04055 |
:104770003CF1CE0133E0880F991F3A95E1F7A4018F |
:10478000481B590B50933402409333028091F60139 |
:104790009091F701A091F801B091F90181589843E7 |
:1047A000A140B0400CF43DC024E0CC0FDD1F2A95A1 |
:1047B000E1F74C1B5D0B509334024093330231C040 |
:1047C0008091F6019091F701A091F801B091F90163 |
:1047D000805A9541AF4FBF4F24F59E0193E0220FC1 |
:1047E000331F9A95E1F7280D391D30933402209339 |
:1047F00033028091F6019091F701A091F801B091F8 |
:10480000F90181589843A140B0405CF084E0CC0F9E |
:10481000DD1F8A95E1F72C1B3D0B3093340220936A |
:10482000330280910705E82FFF27EE0FFF1FE652A6 |
:10483000FB4F2081318180912D05482F552742174C |
:10484000530724F480912E0582FD0DC02081318113 |
:1048500088279927841B950B281739077CF48091AA |
:104860002E0583FF0BC081E080933D0280912C05D3 |
:10487000882E99248614970424F002C010923D02D9 |
:10488000430180910605E82FFF27EE0FFF1FE65238 |
:10489000FB4F808191814817590724F480912E05A0 |
:1048A00080FD0DC02081318188279927841B950BBD |
:1048B000281739078CF480912E0581FF0DC081E007 |
:1048C00080933C0210923D0280912C059927881517 |
:1048D000990524F44C0102C010923C0280912402FC |
:1048E000882341F110923602109235021092320262 |
:1048F0001092310210923402109233028DEC9CEC33 |
:10490000ACECBDE380935A0590935B05A0935C05E6 |
:10491000B0935D058AE097EDA3EABBE380934B0576 |
:1049200090934C05A0934D05B0934E0510923D0217 |
:1049300010923C028091CE019091CF018D54914014 |
:1049400008F4DEC02091F2013091F3014091F401AE |
:104950005091F5018091EE019091EF01A091F0014D |
:10496000B091F101281B390B4A0B5B0BE090FA0167 |
:10497000F090FB010091FC011091FD018091F60186 |
:104980009091F701A091F801B091F901E81AF90AA4 |
:104990000A0B1B0B1092CF011092CE01273A310562 |
:1049A0004105510534F08091DE019091DF010196BF |
:1049B0000AC02A553F4F4F4F5F4F4CF48091DE01A4 |
:1049C0009091DF0101979093DF018093DE0177EAF8 |
:1049D000E716F1040105110534F08091E001909192 |
:1049E000E10101960EC08AE5E8168FEFF8068FEF19 |
:1049F00008078FEF18074CF48091E0019091E101D6 |
:104A000001979093E1018093E00110927A008091E8 |
:104A1000EE019091EF01A091F001B091F10180932E |
:104A2000060290930702A0930802B09309028091B6 |
:104A3000F6019091F701A091F801B091F9018093EE |
:104A40000E0290930F02A0931002B0931102809176 |
:104A5000FE019091FF01A0910002B09101028093AC |
:104A6000160290931702A0931802B0931902809136 |
:104A7000600590916105A0916205B0916305805D2C |
:104A80009D4DA640B040A4F08091600590916105D5 |
:104A9000A0916205B0916305805D9D4DA640B04038 |
:104AA0008093600590936105A0936205B0936305C0 |
:104AB0008091600590916105A0916205B0916305B8 |
:104AC000B7FF14C08091600590916105A0916205C7 |
:104AD000B091630580539242A94FBF4F8093600508 |
:104AE00090936105A0936205B09363058FEE809368 |
:104AF0007A00809100018A3011F4289801C0289A28 |
:104B000020E030E040E050E060914B0570914C05B2 |
:104B100080914D0590914E050E94D339882309F468 |
:104B2000F7C080913C02882309F0F2C080913D02D9 |
:104B3000882309F0EDC06091EE017091EF01809142 |
:104B4000F0019091F10120911A05A22EBB24CC24F2 |
:104B5000DD24E0905105F0905205A60195010E94D8 |
:104B6000FF3A0027F7FC0095102F2E193F09400B44 |
:104B7000510B2093530230935402409355025093AB |
:104B800056028091510590915205AA2797FDA09554 |
:104B9000BA2FB7FF07C0B095A095909581959F4F0C |
:104BA000AF4FBF4F883C9105A105B1053CF4CA0148 |
:104BB000B90128E030E040E050E006C0CA01B90188 |
:104BC00020E130E040E050E00E94FF3A20935302A1 |
:104BD0003093540240935502509356026091F6016F |
:104BE0007091F7018091F8019091F901E0905E05D4 |
:104BF000F0905F05A60195010E94FF3A0027F7FC9F |
:104C00000095102F2E193F09400B510B20934F0296 |
:104C100030935002409351025093520280915E05AE |
:104C200090915F05AA2797FDA095BA2FB7FF07C0FF |
:104C3000B095A095909581959F4FAF4FBF4F883C01 |
:104C40009105A105B1053CF4CA01B90128E030E0A5 |
:104C500040E050E006C0CA01B90120E130E040E088 |
:104C600050E00E94FF3A20934F023093500240934D |
:104C70005102509352028091530290915402A0919C |
:104C80005502B0915602853FF1E09F07F0E0AF0773 |
:104C9000F0E0BF072CF084EF91E0A0E0B0E009C0A5 |
:104CA0008C509E4FAF4FBF4F64F48CE09EEFAFEF40 |
:104CB000BFEF8093530290935402A0935502B09398 |
:104CC000560280914F0290915002A0915102B091F2 |
:104CD0005202853F41E0940740E0A40740E0B4075A |
:104CE0002CF084EF91E0A0E0B0E009C08C509E4F22 |
:104CF000AF4FBF4FECF48CE09EEFAFEFBFEF809370 |
:104D00004F0290935002A0935102B093520210C0F0 |
:104D100010925302109254021092550210925602B1 |
:104D200010924F02109250021092510210925202B1 |
:104D300010927A00809151059091520597FF03C01F |
:104D4000909581959F4F90934605809345052091BE |
:104D50005E0530915F0537FF03C0309521953F4FC9 |
:104D60003093500520934F0584369105E4F52436A1 |
:104D70003105E4F58091020290910302A0910402B2 |
:104D8000B091050220915302309154024091550296 |
:104D900050915602821B930BA40BB50B8093020219 |
:104DA00090930302A0930402B093050280910A023B |
:104DB00090910B02A0910C02B0910D0220914F0234 |
:104DC000309150024091510250915202821B930B3C |
:104DD000A40BB50B80930A0290930B02A0930C02D4 |
:104DE000B0930D02BEC0883C9105D4F5283C310536 |
:104DF000D4F5E0900202F0900302009104021091B9 |
:104E00000502609153027091540280915502909175 |
:104E1000560222E030E040E050E00E94FF3AE21A01 |
:104E2000F30A040B150BE0920202F09203020093C6 |
:104E3000040210930502E0900A02F0900B02009128 |
:104E40000C0210910D0260914F02709150028091FE |
:104E500051029091520222E030E040E050E073C0F5 |
:104E600080599140D4F520593140BCF5E0900202C0 |
:104E7000F090030200910402109105026091530228 |
:104E800070915402809155029091560224E030E0D6 |
:104E900040E050E00E94FF3AE21AF30A040B150BBF |
:104EA000E0920202F09203020093040210930502C2 |
:104EB000E0900A02F0900B0200910C0210910D029A |
:104EC00060914F0270915002809151029091520274 |
:104ED00024E030E040E050E036C0E0900202F09084 |
:104EE0000302009104021091050260915302709137 |
:104EF0005402809155029091560228E030E040E043 |
:104F000050E00E94FF3AE21AF30A040B150BE092FC |
:104F10000202F09203020093040210930502E09053 |
:104F20000A02F0900B0200910C0210910D026091A8 |
:104F30004F0270915002809151029091520228E0EC |
:104F400030E040E050E00E94FF3AE21AF30A040B1E |
:104F5000150BE0920A02F0920B0200930C021093E0 |
:104F60000D020091350210913602A80117FF04C00E |
:104F700044275527401B510B453151053CF080918A |
:104F80000E0584FD03C081E0809344022091170543 |
:104F90003327049FC001059F900D149F900D11248D |
:104FA000FC012E9FC0012F9F900D3E9F900D11245C |
:104FB00060E072E00E94CA3AFB01209FC001219F7D |
:104FC000900D309F900D112464E070E00E94CA3A69 |
:104FD000E60FF71F9F01442737FD4095542F20937C |
:104FE0005702309358024093590250935A028091CD |
:104FF000120290911302A0911402B0911502821B2B |
:10500000930BA40BB50B8093120290931302A09301 |
:105010001402B09315028091120290911302A09194 |
:105020001402B0911502895A9146A040B04064F034 |
:1050300088EA91E6A0E0B0E0809312029093130218 |
:10504000A0931402B0931502809112029091130262 |
:10505000A0911402B091150288559E49AF4FBF4FE1 |
:1050600064F488E59EE9AFEFBFEF8093120290935E |
:105070001302A0931402B09315028091160290912E |
:105080001702A0911802B0911902821B930BA40B76 |
:10509000B50B8093160290931702A0931802B09359 |
:1050A00019028FEE80937A008091B201882309F46F |
:1050B000D4C01092B201209151053091520537FFB2 |
:1050C00003C0309521953F4F309346052093450509 |
:1050D00080915E0590915F0597FF03C09095819543 |
:1050E0009F4F9093500580934F05243631050CF067 |
:1050F000B2C0843691050CF0AEC020911E023091F2 |
:105100001F028091B3019091B401281B390B37FF26 |
:1051100003C0309521953F4F263031050CF09DC0DE |
:1051200010927A0081E08093260260916005709170 |
:105130006105809162059091630522EE34E040E0C4 |
:1051400050E00E94FF3A2093600530936105409340 |
:1051500062055093630520911E0230911F028091D9 |
:10516000600590916105A0916205B0916305281BCF |
:10517000390B3093460520934505C9010197833BC0 |
:105180009105C0F0243B310534F4C9018C549F4F84 |
:10519000843B910560F48091600590916105A09138 |
:1051A0006205B09163050197A109B1090EC02C54A5 |
:1051B0003F4F9CF48091600590916105A09162053C |
:1051C000B09163050196A11DB11D80936005909378 |
:1051D0006105A0936205B09363058091600590918D |
:1051E0006105A0916205B0916305B7FF14C080917D |
:1051F000600590916105A0916205B09163058859A1 |
:105200009E4FAF4FBF4F8093600590936105A09371 |
:105210006205B093630560916005709161058091AE |
:1052200062059091630528E631E040E050E00E947D |
:10523000FF3A22EE34E040E050E00E948B3A609367 |
:1052400060057093610580936205909363058FEE0E |
:1052500080937A0002C01092260280910E0585FF8D |
:105260002AC080913302909134024896C19718F574 |
:1052700080913102909132024896C197E0F480917A |
:10528000D7059091D805892BB1F080918501909137 |
:105290002702893C20F0933021F084E006C094304E |
:1052A00019F41092270203C083E0809327028091B3 |
:1052B0002702992702C080E090E00E944831809147 |
:1052C0001E0290911F02892B09F466C080910E0581 |
:1052D00083FF62C08091B5019091B601892B09F4DA |
:1052E0005BC020914F05309150058091450590910C |
:1052F00046058217930724F430934605209345050D |
:1053000020912602222371F080914402882351F0DB |
:1053100080911E0290911F0290932102809320029F |
:105320001092440280918801482F552750934605DA |
:1053300040934505141615067CF510927A00222339 |
:1053400041F1009112021091130220911402309148 |
:1053500015028091220290912302FC01E49FC0017A |
:10536000E59F900DF49F900D112460E270E00E9483 |
:10537000CA3A882777FD8095982F060F171F281F98 |
:10538000391F0093120210931302209314023093DA |
:1053900015028FEE80937A008091450281508093B0 |
:1053A00045028F3F09F0DCC081E3809345026091A4 |
:1053B000EE017091EF018091F0019091F101E09088 |
:1053C0001A05FF2400271127A80197010E94FF3A20 |
:1053D0003093800420937F046091F6017091F7016F |
:1053E0008091F8019091F901A80197010E94FF3A7C |
:1053F000309382042093810480915105909152054D |
:10540000909384048093830480915E0590915F055E |
:105410009093860480938504809158059091590556 |
:105420009093880480938704809138029091390288 |
:1054300090938A048093890460911A0270911B02F0 |
:1054400080911C0290911D0220E032E040E050E08B |
:105450000E94FF3A30938C0420938B0480911E02AB |
:1054600090911F029093900480938F046091600547 |
:1054700070916105809162059091630522EE34E0A0 |
:1054800040E050E00E94FF3A309392042093910450 |
:1054900080919E0190919F019093A00480939F041E |
:1054A00080910701909108019093A2048093A10438 |
:1054B00080914205909143059093A4048093A304A6 |
:1054C00080914005909141059093A6048093A50496 |
:1054D00080915805909159059093A8048093A70452 |
:1054E00080913102909132029093AA048093A90492 |
:1054F00080913302909134029093AC048093AB047A |
:1055000080913502909136029093AE048093AD0461 |
:105510008091E6059091E7059093B4048093B304DD |
:105520008091E8059091E9059093B6048093B504C5 |
:105530008091EA059091EB059093B8048093B704AD |
:105540002091270284E1289F900111248091F30586 |
:105550009091F405820F931F9093BA048093B9043D |
:1055600080913C028823A9F0609142057091430527 |
:10557000882777FD8095982F0E94C93920915A0578 |
:1055800030915B0540915C0550915D050E94433A66 |
:1055900032C06091EE017091EF018091F001909125 |
:1055A000F101E0904205F09043050E94C939209135 |
:1055B0004B0530914C0540914D0550914E050E9490 |
:1055C000433A5B016C010027F7FC0095102FC801DE |
:1055D000B7010E94C93920915A0530915B0540916D |
:1055E0005C0550915D050E94433A9B01AC01C601E8 |
:1055F000B5010E9424390E94AC3970934305609331 |
:10560000420580913D028823A9F060914005709188 |
:105610004105882777FD8095982F0E94C9392091F0 |
:105620005A0530915B0540915C0550915D050E94E3 |
:10563000433A32C06091F6017091F7018091F80110 |
:105640009091F901E0904005F09041050E94C93920 |
:1056500020914B0530914C0540914D0550914E05E0 |
:105660000E94433A5B016C010027F7FC0095102F64 |
:10567000C801B7010E94C93920915A0530915B05D4 |
:1056800040915C0550915D050E94433A9B01AC013D |
:10569000C601B5010E9424390E94AC3970934105BE |
:1056A000609340056091580570915905E090FE01A6 |
:1056B000F090FF010091000210910102882777FD10 |
:1056C0008095982F0E94C93920915A0530915B0529 |
:1056D00040915C0550915D050E94433A5B016C016D |
:1056E000C801B7010E94C93920914B0530914C0582 |
:1056F00040914D0550914E050E94433A20E030E024 |
:1057000040E05FE30E94433A9B01AC01C601B50152 |
:105710000E9424390E94AC39709359056093580552 |
:1057200080914205909143058150984034F080E08B |
:1057300098E09093430580934205809142059091B3 |
:1057400043058050984F34F480E098EF90934305E0 |
:105750008093420580914005909141058150984089 |
:1057600034F080E098E0909341058093400580916B |
:105770004005909141058050984F34F480E098EFB7 |
:10578000909341058093400580915805909159056B |
:105790008150984034F080E098E0909359058093D0 |
:1057A000580580915805909159058050984F34F4D0 |
:1057B00080E098EF909359058093580580910E05ED |
:1057C000992780FFBEC02091850181FF0EC0223342 |
:1057D000B0F48091380290913902449790933B0243 |
:1057E00080933A02109225020DC080911305289FE4 |
:1057F000C0011124449790933B0280933A0281E0C8 |
:105800008093250280912402882321F010923B028C |
:1058100010923A02209138023091390240913A02B6 |
:1058200050913B02421753070CF08BC08091250228 |
:10583000882309F486C0241B350B809186019927A3 |
:10584000FC012E9FC0012F9F900D3E9F900D1124B3 |
:1058500060E170E00E94CA3AE401C61BD70B2091B8 |
:10586000CC013091CD01809184019927AC01249F16 |
:10587000C001259F900D349F900D112468E070E0C9 |
:105880000E94CA3AC61BD70B60911A0270911B0284 |
:1058900080911C0290911D0220E032E040E050E037 |
:1058A0000E94FF3ACA01B90120918701332744279A |
:1058B00055270E948B3A20E230E040E050E00E9401 |
:1058C000FF3A5FEF2E3C350714F42EEC3FEF80914A |
:1058D000460290914702AC01B4E0440F551FBA95BF |
:1058E000E1F7481B590B2333310514F022E330E074 |
:1058F000C21BD30BCA018C0F9D1F60E170E00E9498 |
:10590000CA3A709347026093460280910F05992727 |
:10591000681779073CF4881699065CF09093470263 |
:10592000809346028091460290914702881699061C |
:1059300024F4909247028092460280904602909012 |
:10594000470290928E0480928D04C0915805D091A8 |
:1059500059058091570290915802C81BD90BB40188 |
:10596000882777FD8095982F0E94C9397B018C018B |
:10597000BE01882777FD8095982F0E94C939A8011C |
:1059800097010E94D63918162CF4C801B7010E945D |
:10599000AC39EB0117FB109517F91095BE0188275C |
:1059A00077FD8095982F0E94C939A80197010E9420 |
:1059B000D33988232CF4C801B7010E94AC39EB011C |
:1059C000C536D1051CF0C4E6D0E006C06FEFCC3977 |
:1059D000D60714F4CCE9DFEF74E18716910414F4D0 |
:1059E000C0E0D0E040907C0150907D0160907E014D |
:1059F00070907F01609142057091430520913102C2 |
:105A0000309132024091670250916802241B350B9D |
:105A1000621B730B882777FD8095982F0E94C939E8 |
:105A20009B01AC01C301B2010E94433A0E94AC3910 |
:105A300070939602609395028091950290919602E0 |
:105A40008C01222717FD2095322F80915F029091C3 |
:105A50006002A0916102B0916202080F191F2A1F13 |
:105A60003B1F00935F02109360022093610230930A |
:105A700062021016110612061306ACF4C80117FFD5 |
:105A800003C0909581959F4F60E071E00E94CA3AF3 |
:105A90006F5F7F4F882777FD8095982F061B170B28 |
:105AA000280B390B14C0C80117FF03C090958195CE |
:105AB0009F4F60E071E00E94CA3A6F5F7F4F882776 |
:105AC00077FD8095982F060F171F281F391F009309 |
:105AD0005F02109360022093610230936202809112 |
:105AE0005F0290916002A0916102B09162028138E0 |
:105AF000EEE39E07E0E0AE07E0E0BE072CF080E8B2 |
:105B00009EE3A0E0B0E009C08058914CAF4FBF4F7A |
:105B100064F480E891ECAFEFBFEF80935F02909365 |
:105B20006002A0936102B0936202209195023091CD |
:105B30009602CE01D7FF04C0882799278C1B9D0BA6 |
:105B40006401C80ED91ECC0CDD1CC6012C153D0508 |
:105B50000CF4C901AA24BB24AC18BD08B501A816D1 |
:105B6000B9060CF4BC0194012C0F3D1F260F371F02 |
:105B700037FF03C040E050E008C080915705482F30 |
:105B80005527241735070CF4A90180914405E82E08 |
:105B9000FF24C701E416F5060CF4CA0180939302B2 |
:105BA0009401261B370B2C0F3D1F37FF03C080E0ED |
:105BB00090E007C0809157059927281739070CF402 |
:105BC000C9019701E816F9060CF49C012093940290 |
:105BD000609140057091410520913302309134026B |
:105BE0004091690250916A02241B350B621B730BB2 |
:105BF000882777FD8095982F0E94C9399B01AC01B9 |
:105C0000C301B2010E94433A0E94AC3970939202E0 |
:105C10006093910280919102909192028C012227CF |
:105C200017FD2095322F80915B0290915C02A0912C |
:105C30005D02B0915E02080F191F2A1F3B1F0093DF |
:105C40005B0210935C0220935D0230935E0210169B |
:105C5000110612061306ACF4C80117FF03C0909595 |
:105C600081959F4F60E071E00E94CA3A6F5F7F4F5D |
:105C7000882777FD8095982F061B170B280B390B6B |
:105C800014C0C80117FF03C0909581959F4F60E035 |
:105C900071E00E94CA3A6F5F7F4F882777FD809539 |
:105CA000982F060F171F281F391F00935B021093B0 |
:105CB0005C0220935D0230935E0280915B029091C2 |
:105CC0005C02A0915D02B0915E0281382EE39207E2 |
:105CD00020E0A20720E0B2072CF080E89EE3A0E0DD |
:105CE000B0E009C08058914CAF4FBF4F64F480E8DA |
:105CF00091ECAFEFBFEF80935B0290935C02A093B7 |
:105D00005D02B0935E0280919102909192029601A1 |
:105D10008C159D050CF49C01B501A216B3060CF47C |
:105D2000B9019401260F371F2C1B3D0B37FF03C011 |
:105D300040E050E008C080915705482F55272417B0 |
:105D400035070CF4A9019701E416F5060CF49A0145 |
:105D500020939902861A970AB4016C1B7D0B77FF7A |
:105D600003C020E030E008C080915705282F33277A |
:105D7000621773070CF49B01C701E216F3060CF4DB |
:105D8000C90180939702DF91CF911F910F91FF90EE |
:105D9000EF90DF90CF90BF90AF909F908F907F90CB |
:105DA0006F905F904F90089510926C0210926B026A |
:105DB0001092BB051092BA051092F4051092F305EB |
:105DC0001092A60510928805109205061092B9054A |
:105DD0001092CE051092EC051092680210926702A4 |
:105DE00010926A02109269021092F2051092F10567 |
:105DF0001092D6051092D505109293051092920537 |
:105E00001092D8051092D70508958091A605882391 |
:105E100019F481E090E0089580910506882309F443 |
:105E20008CC080918805882309F487C08091F9058A |
:105E300099278370907002970CF474C08091FA05D2 |
:105E400080FF70C0609198057091990580919A05C6 |
:105E500090919B052AE030E040E050E00E94FF3A3C |
:105E60002093BC053093BD054093BE055093BF05FC |
:105E700060919C0570919D0580919E0590919F0574 |
:105E80002AE030E040E050E00E94FF3A2093C00555 |
:105E90003093C1054093C2055093C3056091A0059E |
:105EA0007091A1058091A2059091A3052AE030E0B0 |
:105EB00040E050E00E94FF3A2093C4053093C505AE |
:105EC0004093C6055093C705609178057091790598 |
:105ED00080917A0590917B052AE030E040E050E027 |
:105EE0000E94DD3A2093C8053093C9054093CA0546 |
:105EF0005093CB0560917C0570917D0580917E0566 |
:105F000090917F0520EA36E841E050E00E94FF3A98 |
:105F10003093CD052093CC0581E08093CE0580E0C1 |
:105F200090E004C01092CE0582E090E01092A605A9 |
:105F30001092050610928805089581E090E008957A |
:105F40000E94052F181619060CF44CC08091D70535 |
:105F50009091D80521E08039920730F4845D9E4FFE |
:105F60009093D8058093D7058091B9058823B1F126 |
:105F70008091BC059091BD052091A7053091A805A1 |
:105F8000821B930B9093E7058093E6058091C005F3 |
:105F90009091C1052091AB053091AC05821B930B0C |
:105FA0009093E9058093E8058091C4059091C5051B |
:105FB0002091AF053091B005821B930B9093EB05B8 |
:105FC0008093EA0581E08093EC0581E090E0909376 |
:105FD000F2058093F10580E090E008951092EC05C1 |
:105FE00082E090E008950E94052F892B99F5809119 |
:105FF000BC059091BD05A091BE05B091BF058093F1 |
:10600000A7059093A805A093A905B093AA05809130 |
:10601000C0059091C105A091C205B091C3058093C0 |
:10602000AB059093AC05A093AD05B093AE05809100 |
:10603000C4059091C505A091C605B091C705809390 |
:10604000AF059093B005A093B105B093B20581E080 |
:106050008093B9050895482F20916B0230916C020E |
:106060002530310509F49AC0263031058CF42130F1 |
:10607000310529F1223031051CF4232BD1F003C165 |
:106080002230310571F12330310509F0FCC02FC0F9 |
:106090002730310509F4E2C0273031050CF490C0F7 |
:1060A0002830310509F4E5C02930310509F0EBC08D |
:1060B000A2C0853B09F0E7C081E090E0D5C0823600 |
:1060C00039F482E090E090936C0280936B0204C0FC |
:1060D00010926C0210926B02109281021092820256 |
:1060E0000895813009F0CFC083E090E0BDC08830D2 |
:1060F00031F0823151F1833009F044C013C026EAF7 |
:1061000035E03093900220938F028091A60588237A |
:10611000C9F52251304030938E0220938D022E5EBD |
:106120003F4F25C025E036E03093900220938F0248 |
:1061300080910506882331F52051304030938E023E |
:1061400020938D02205F3F4F12C028E835E0309346 |
:10615000900220938F0280918805882399F424521D |
:10616000304030938E0220938D022C5D3F4F309350 |
:1061700086022093850285E090E090936C028093E4 |
:106180006B0204C010926C0210926B02842F8F5F1E |
:10619000809381028F5F8093820208959927909364 |
:1061A00084028093830290918102940F90938102E4 |
:1061B00080918202890F8093820286E090E054C031 |
:1061C000282F3327322F2227809183029091840237 |
:1061D000820F931F90938402809383029091810297 |
:1061E000940F9093810280918202890F80938202A2 |
:1061F00089E090E039C0609183027091840261155A |
:10620000710509F440C0E0918D02F0918E02808307 |
:1062100080918102840F8093810290918202980F75 |
:1062200090938202CB010197909384028093830222 |
:10623000892B89F080918502909186028E179F07A5 |
:1062400050F03196F0938E02E0938D0230936C0201 |
:1062500020936B02089587E090E006C08091810250 |
:10626000481789F488E090E090936C0280936B0269 |
:10627000089580918202481731F4E0918F02F091E5 |
:10628000900281E0808310926C0210926B0208955C |
:106290002F923F924F925F926F927F928F929F9236 |
:1062A000AF92BF92CF92DF92EF92FF920F931F9324 |
:1062B000CF93DF933C018330910509F4C4C084304F |
:1062C000910521F0892B09F422C1BAC02091BA05A9 |
:1062D0003091BB05C9010197029708F435C180913F |
:1062E0007F029091800201969093800280937F02BA |
:1062F000855F914008F4F5C51092800210927F02EC |
:10630000109288021092870210928A0210928902DB |
:1063100010928C0210928B0210927E0210927D02DB |
:1063200010927C0210927B021092EE051092ED0505 |
:106330001092F0051092EF051092780210927702F9 |
:1063400010927A02109279021092720210927102E7 |
:106350001092700210926F021092760210927502E3 |
:1063600010927402109273021092CF051092D00511 |
:106370001092D1051092D20510926E0210926D0209 |
:106380001092F4051092F3058091EC05882309F42E |
:1063900051C08091E6059091E7059093E0058093C8 |
:1063A000DF056091E8057091E9057093E20560935F |
:1063B000E10521E02093E50590938C0580938B0502 |
:1063C00070938E0560938D0520939105709561956E |
:1063D0007F4F909581959F4F0E9489379C019093A4 |
:1063E000D4058093D305E091DF05F091E005F7FF38 |
:1063F00003C08AE590E002C08EE091E0821B930B1F |
:106400009093D4058093D3054091D3055091D40542 |
:106410006091E1057091E205CF010E94C33870934D |
:10642000DC056093DB0582E090E09093BB058093F0 |
:10643000BA055AC51092E5051092BB051092BA052F |
:1064400082E090E053C58091BA059091BB05019719 |
:1064500009F4FAC180917F02909180020196909395 |
:10646000800280937F02855F914008F43AC51092C4 |
:10647000800210927F028091EC05882309F444C0C9 |
:1064800010928A021092890210928C0210928B0252 |
:1064900010927E0210927D0210927C0210927B027A |
:1064A0001092EE051092ED051092F0051092EF0596 |
:1064B000109278021092770210927A02109279026A |
:1064C00010927202109271021092700210926F027A |
:1064D000109276021092750210927402109273025A |
:1064E0008091E6059091E70590938C0580938B054C |
:1064F0008091E8059091E90590938E0580938D0534 |
:1065000081E0809391059DC11092910595CF1092E5 |
:10651000800210927F02109268021092670210921D |
:106520006A02109269021092D6051092D505109257 |
:106530009305109292051092F4051092F3051092B3 |
:10654000BB051092BA05D0C42130310509F47CC1D5 |
:106550002230310541F0232B09F06ECF10928002DA |
:1065600010927F02C1C48091E505882309F464CFAD |
:106570008091F1059091F205181619060CF061C191 |
:106580008091F3059091F405099709F45AC180911F |
:1065900087029091880201969093880280938702E7 |
:1065A00060918B0570918C058091E6059091E705CF |
:1065B0006B01C81AD90AD7FE04C0D094C194D1087F |
:1065C000D394E0918D05F0918E058091E80590912E |
:1065D000E905DF01A81BB90BB7FF03C0B095A19572 |
:1065E000BF4F2091CF053091D0054091D1055091FA |
:1065F000D2058091DB059091DC05821B930B8333E0 |
:1066000091050CF444C08CE3C816D1042CF5DC973A |
:106610001CF580916D0290916E028C3091052CF4E6 |
:10662000019690936E0280936D0280916D0290911D |
:106630006E02AA2797FDA095BA2F280F391F4A1F6F |
:106640005B1F2093CF053093D0054093D105509325 |
:10665000D20583E090E041C080916D0290916E027E |
:10666000823091052CF0019790936E0280936D0219 |
:106670002F5F3F4F4F4F5F4F2093CF053093D00593 |
:106680004093D1055093D20584E090E026C04F9707 |
:106690000CF484C098E2C916D1048CF498977CF469 |
:1066A0002A5F3F4F4F4F5F4F2093CF053093D00568 |
:1066B0004093D1055093D20585E090E00EC02F5F46 |
:1066C0003F4F4F4F5F4F2093CF053093D0054093FE |
:1066D000D1055093D20586E090E09093F405809325 |
:1066E000F30510928C0210928B0281E090E090935F |
:1066F0008A02809389026090CF057090D0058090C7 |
:10670000D1059090D2058091D3059091D4050E9437 |
:1067100065387C012090CF053090D0054090D105A0 |
:106720005090D2058091D3059091D4050E94BB383A |
:106730005C010027F7FC0095102FC401B301A801EC |
:1067400097010E948B3A28EE33E040E050E00E942F |
:10675000FF3A8091DF059091E005820F931F90939F |
:106760008C0580938B05CC24B7FCC094DC2CC20133 |
:10677000B101A60195010E948B3A28EE33E040E07A |
:1067800050E00E94FF3A8091E1059091E205820F6E |
:10679000931F90938E0580938D0553C028E2C216F7 |
:1067A000D1040CF048C098970CF045C087E090E009 |
:1067B0009093F4058093F30510928A021092890257 |
:1067C00010928C0210928B02633071051CF06350A2 |
:1067D000704006C03FEF6E3F730734F46D5F7F4F2C |
:1067E00070938C0560938B05E330F10514F03397BB |
:1067F00005C04FEFEE3FF4072CF43396F0938E056F |
:10680000E0938D0580918B0590918C0503960797F9 |
:10681000C0F480918D0590918E050396079788F4BA |
:1068200010928C0510928B0510928E0510928D059A |
:1068300089E090E002C088E090E09093F4058093B6 |
:10684000F30581E090E0F1CD8091F1059091F205A2 |
:10685000181619060CF040C31092F2051092F105BB |
:1068600020917702309178024091790250917A021A |
:10687000A0908B05B0908C058091E6059091E7057E |
:10688000A81AB90AB0927802A0927702C0918D0539 |
:10689000D0918E058091E8059091E905C81BD90B30 |
:1068A000D0937A02C0937902C0907D02D0907E028C |
:1068B000CA0CDB1CD0927E02C0927D0200917B024A |
:1068C00010917C020C0F1D1F10937C0200937B0221 |
:1068D000F501E21BF30BF0937602E09375027E0163 |
:1068E000E41AF50AF0927402E09273028091890230 |
:1068F00090918A02209171023091720280906F0211 |
:106900009090700218161906FCF4C901880F991F9F |
:1069100063E070E00E94CA3A9B01CF0163E070E03F |
:106920000E94CA3A260F371F3093720220937102D9 |
:10693000C401880F991F63E070E00E94CA3A9B016E |
:10694000C70163E070E022C0C90164E070E00E940A |
:10695000CA3A9B01CF01880F991F8E0F9F1F64E0D9 |
:1069600070E00E94CA3A260F371F309372022093BC |
:106970007102C40164E070E00E94CA3A9B01C70141 |
:10698000880F991F8E0D9F1D64E070E00E94CA3A27 |
:10699000260F371F3093700220936F02C601D7FE77 |
:1069A00004C0882799278C199D098153954754F471 |
:1069B000C80117FF04C088279927801B910B8153BA |
:1069C000954764F0CA18DB08D0927E02C0927D021F |
:1069D0000C1B1D0B10937C0200937B0280918B0299 |
:1069E00090918C021816190644F410927E021092AF |
:1069F0007D0210927C0210927B02B501B7FE03C0AB |
:106A0000709561957F4FCE01D7FF03C0909581951A |
:106A10009F4F0E9489376091790270917A02AC0190 |
:106A200080917702909178020E94C3389B01AC015B |
:106A30008091890290918A02892B81F4CA01B9015F |
:106A400023E030E040E050E00E94FF3AE9012A965E |
:106A5000C531D10594F0C4E1D0E00FC0CA01B9013D |
:106A60002AE030E040E050E00E94FF3AE9012A9637 |
:106A7000C031D10514F0CFE0D0E0E0903F02FF2418 |
:106A80000027112760917D0270917E02882777FD93 |
:106A90008095982FA80197010E948B3A20E230E060 |
:106AA00040E050E00E94FF3A59016A0160917B0288 |
:106AB00070917C02882777FD8095982FA801970117 |
:106AC0000E948B3A20E230E040E050E00E94FF3A22 |
:106AD00030937C0220937B0230E6A3163FEFB3068F |
:106AE0003FEFC3063FEFD30644F460E6A62E6FEFF8 |
:106AF000B62E6FEFC62E6FEFD62E980187010036A7 |
:106B00004FEF14074FEF24074FEF340724F400E64C |
:106B10001FEF2FEF3FEF80913E02E82EFF24809180 |
:106B20004002882E992451EAA516B104C104D1046B |
:106B30002CF050EAA52EB12CC12CD12C80917702DB |
:106B400090917802880F991FAC01E49EC001E59EE8 |
:106B5000900DF49E900D112460E170E00E94CA3AFD |
:106B6000FB01EA0DFB1D8091710290917202AC0154 |
:106B7000849EC001859E900D949E900D1124AC01C1 |
:106B8000C49FC001C59F900DD49F900D11246AE051 |
:106B900070E00E94CA3AE60FF71FF093EE05E0930B |
:106BA000ED0558016901013A1105210531052CF067 |
:106BB00030EAA32EB12CC12CD12C80917902909176 |
:106BC0007A02880F991F9C01E29EC001E39E900DFE |
:106BD000F29E900D112460E170E00E94CA3A9B0180 |
:106BE0002A0D3B1D80916F0290917002AC01849E32 |
:106BF000C001859E900D949E900D1124AC01C49F00 |
:106C0000C001C59F900DD49F900D11246AE070E0E3 |
:106C10000E94CA3A260F371F3093F0052093EF05E4 |
:106C2000B901CF010E9489379C019093DE058093C2 |
:106C3000DD050091ED051091EE0517FD03C08AE515 |
:106C400090E002C08EE091E0821B930B9093DE05F2 |
:106C50008093DD056091600570916105809162050A |
:106C600090916305C091DD05D091DE0522EE34E000 |
:106C700040E050E00E94FF3ACE01821B930B9C0142 |
:106C800090938A0580938905853B91057CF0C43BF0 |
:106C9000D1051CF0285631400FC088E691E0821BD8 |
:106CA000930B90938A05809389050AC09FEF2C343B |
:106CB000390734F428593E4F30938A0520938905CB |
:106CC000C090EF05D090F005980117FF04C022276F |
:106CD0003327201B310BC601D7FE04C08827992714 |
:106CE0008C199D098217930754F4CE010E946538D0 |
:106CF0007C01B801882777FD8095982F09C0CE01C7 |
:106D00000E94BB387C01B601882777FD8095982FBB |
:106D100028EE33E040E050E00E948B3A0027F7FC79 |
:106D20000095102FA80197010E94FF3AB90137FF83 |
:106D300003C0709561957F4F5B01CC24B7FCC09474 |
:106D4000DC2CB092DA05A092D9058091890590914A |
:106D50008A050E9465389C01442737FD4095542FD1 |
:106D6000C601B5010E948B3A28EE33E040E050E0C6 |
:106D70000E94FF3A30936A0220936902809189054C |
:106D800090918A050E94BB389C01442737FD4095AD |
:106D9000542FC601B5010E948B3A28EE33E040E043 |
:106DA00050E00E94FF3A309521953F4F30936802A2 |
:106DB000209367028091690290916A0241E08134D8 |
:106DC00094071CF080E491E005C0805C9E4F34F491 |
:106DD00080EC9EEF90936A028093690281E02134F7 |
:106DE00038071CF080E491E005C0205C3E4F34F48D |
:106DF00080EC9EEF90936802809367028091690215 |
:106E000090916A020AE510E09C01209FC001219F39 |
:106E1000900D309F900D112460E471E00E94CA3AF9 |
:106E2000CB010E946538AA2797FDA095BA2FBC0117 |
:106E3000CD0129E130E040E050E00E94FF3A30937C |
:106E40006A02209369028091670290916802AC0106 |
:106E5000409FC001419F900D509F900D112460E410 |
:106E600071E00E94CA3ACB010E946538AA2797FDBB |
:106E7000A095BA2FBC01CD0129E130E040E050E0FF |
:106E80000E94FF3A30936802209367028091770254 |
:106E90009091780297FF03C0909581959F4F8159FB |
:106EA000914064F48091790290917A0297FF03C037 |
:106EB000909581959F4F815991404CF010926A02B4 |
:106EC000109269021092680210926702B5CA34E00B |
:106ED0006316710449F4A7CA44E06416710421F4EE |
:106EE000A2CA81E090E002C080E090E0DF91CF9103 |
:106EF0001F910F91FF90EF90DF90CF90BF90AF90D8 |
:106F00009F908F907F906F905F904F903F902F90C9 |
:106F10000895EF92FF920F931F93CF93DF938C010D |
:106F2000EB019C0197FF04C022273327281B390B54 |
:106F3000CE01D7FF04C0882799278C1B9D0B821791 |
:106F400093073CF4CE01E8018C01B1E0EB2EF12C6B |
:106F500002C0EE24FF24209741F40115110529F405 |
:106F600061E070E080E090E024C0B801882777FD00 |
:106F70008095982F28EE33E040E050E00E948B3A55 |
:106F80009E01442737FD4095542F0E94FF3AB901D6 |
:106F900037FF03C0709561957F4F882777FD8095F7 |
:106FA000982F6D3021E0720720E0820720E09207E1 |
:106FB00004F524E630E040E050E00E948B3A2CE0FB |
:106FC00031E040E050E00E94FF3ACA01B901A4E07C |
:106FD000660F771F881F991FAA95D1F7621B730B45 |
:106FE000840B950B24E630E040E050E00E94FF3A2D |
:106FF00053C0633422E0720720E0820720E092074A |
:1070000034F524E630E040E050E00E948B3A605BCB |
:1070100078468040904026E331E040E050E00E9416 |
:10702000FF3ACA01B901F4E0660F771F881F991F64 |
:10703000FA95D1F7621B730B840B950B24E630E0B5 |
:1070400040E050E00E94FF3A215F3F4F25C022E31D |
:1070500030E040E050E00E948B3A645E7047804030 |
:10706000904026EA31E040E050E00E94FF3ACA0139 |
:10707000B901E4E0660F771F881F991FEA95D1F7E1 |
:10708000621B730B840B950B22E330E040E050E071 |
:107090000E94FF3A225E3F4FEF2829F48AE590E0F4 |
:1070A000821B930B9C0117FD03C0D7FF06C002C0D3 |
:1070B000D7FD03C0309521953F4FC901DF91CF9196 |
:1070C0001F910F91FF90EF900895FC01F7FF04C00E |
:1070D000882799278E1B9F0B8856914034F0CF014B |
:1070E00068E671E00E94CA3AFC01F7FD03C041E086 |
:1070F00050E005C0F095E195FF4F4FEF5FEFCF01F6 |
:107100008B5590408A35910530F484EB90E08E1BCE |
:107110009F0BFC010FC0CF01855B90408A35910524 |
:1071200018F4E45BF0400EC0CF018F5091408A35D7 |
:10713000910518F021E030E007C088E691E08E1B51 |
:107140009F0BFC012FEF3FEFEE0FFF1FE952FC4FAB |
:1071500085919491BC01629FC001639F900D729FC5 |
:10716000900D11249C01429FC001439F900D529F9E |
:10717000900D112408952AE530E0281B390BC90130 |
:107180000E9465380895EF92FF920F931F93CF935B |
:10719000DF93EA01AC0197FF04C044275527481B41 |
:1071A000590B9B0177FF04C022273327261B370B7F |
:1071B0002417350794F49C01B901882777FD809541 |
:1071C000982F28EE33E040E050E00E948B3A7B019C |
:1071D0008C01CE010E9465380FC0882777FD80950D |
:1071E000982F28EE33E040E050E00E948B3A7B017C |
:1071F0008C01CE010E94BB389C01442737FD40958D |
:10720000542FC801B7010E94FF3AB90137FF03C0EC |
:10721000709561957F4F882777FD8095982FDF9136 |
:10722000CF911F910F91FF90EF900895FC01415075 |
:10723000504030F001900616D1F73197CF010895F4 |
:107240008827992708955058192EEFD001D0D2C021 |
:10725000BA176207730784079507B1F188F40EF433 |
:1072600010940B2EBA2FA02D062E622F202D072E44 |
:10727000732F302D082E842F402D092E952F502D41 |
:10728000FF275523B9F0591B49F0573E98F0469512 |
:1072900037952795A795F0405395C9F776F0BA0F23 |
:1072A000621F731F841F30F4879577956795B79594 |
:1072B000F040939517FA0F2E0895BF1BBB27BA0B0A |
:1072C000620B730B840BF6CFDEF6DBC0AED001D0C1 |
:1072D00091C0552359F0992369F09F575F57951B2B |
:1072E00033F442F4903811F4915805C09BC0915882 |
:1072F0009F3F09F4C6C0BB27112462177307840798 |
:1073000030F4660F771F881FBB1F915098F311D080 |
:107310000F920FD00F920DD0A0E82617370748071D |
:107320001B0609F0A048BA2F602D7F918F91002491 |
:107330000895A0E80024621773078407B10528F0B8 |
:10734000621B730B840BB1090A2A660F771F881F13 |
:10735000BB1FA69581F7089597FB73D09F3738F030 |
:10736000FEE9F91B982F872F762F6B2F05C086C05B |
:107370009695879577956795F150D0F73EF490955F |
:107380008095709561957F4F8F4F9F4F0895E8943A |
:1073900003C097FB0EF4F3DFB62F672F782F892FEA |
:1073A0009EE9002427C00ED05EF004C00BD026F06A |
:1073B00001C008D019F020F48FEF089580E00895FF |
:1073C00081E0089597FB092E052600F8689430D0D7 |
:1073D000E89407FC07C0621773078407950721F03C |
:1073E00008F400940794989408959A95BB0F661F2B |
:1073F000771F881F11249923A1F08823B2F79F3F9C |
:1074000059F0BB0F48F421F4002011F460FF04C0D0 |
:107410006F5F7F4F8F4F9F4F881F9795879597F985 |
:1074200008952CC09FEF80EC0895052E092607FAD9 |
:10743000440F551F5F3F79F0AA27A51708F051E0C8 |
:107440004795880F991F9F3F31F0BB27B91708F068 |
:1074500091E0879508959F919F911124E3CF97FB29 |
:10746000880F991F9F3F31F0BB27B91708F091E0B3 |
:10747000879508959F919F911124D4CF66277727F0 |
:10748000882799270895D1DF01D0B4CF992339F007 |
:10749000552329F09F575F57950F13F49AF1F1CFB9 |
:1074A00091589F3FE1F3629FA12D0F92BB27639FED |
:1074B000A00DB11DEE27729FA00DB11DEE1FAF9361 |
:1074C000AA27649FB00DE11D739FB00DE11DAA1F97 |
:1074D0006627829FB00DE11DA61F5527749FE00D02 |
:1074E000A11D551F839FE00DA11D561F849FA00D58 |
:1074F000511D852F7A2F6E2F1F900F9088231AF41D |
:10750000939539F48FCF000C111CBB1F661F771F9A |
:10751000881F01280895629FD001739FF001829F08 |
:10752000E00DF11D649FE00DF11D929FF00D839F12 |
:10753000F00D749FF00D659FF00D9927729FB00DAF |
:10754000E11DF91F639FB00DE11DF91FBD01CF01C2 |
:1075500011240895991B79E004C0991F961708F02B |
:10756000961B881F7A95C9F780950895AA1BBB1BA7 |
:1075700051E107C0AA1FBB1FA617B70710F0A61B33 |
:10758000B70B881F991F5A95A9F780959095BC0154 |
:10759000CD01089597FB092E07260AD077FD04D068 |
:1075A000E5DF06D000201AF4709561957F4F0895AD |
:1075B000F6F7909581959F4F0895A1E21A2EAA1B88 |
:1075C000BB1BFD010DC0AA1FBB1FEE1FFF1FA21793 |
:1075D000B307E407F50720F0A21BB30BE40BF50B90 |
:1075E000661F771F881F991F1A9469F76095709519 |
:1075F000809590959B01AC01BD01CF01089597FB4B |
:10760000092E05260ED057FD04D0D7DF0AD0001C66 |
:1076100038F450954095309521953F4F4F4F5F4F2F |
:107620000895F6F790958095709561957F4F8F4FEF |
:107630009F4F0895F999FECFB2BDA1BDF89A11965A |
:1076400000B40895F999FECFB2BDA1BD00BC11965A |
:0E7650000FB6F894FA9AF99A0FBE0895FFCF7C |
:10765E000A0164FFFF0A016400007D0000FF0301C0 |
:10766E0002030405060708090A48616C6C6F20576F |
:10767E00656C7400000000000000000000000000B7 |
:10768E0000000000000000000000000000000000EC |
:10769E0000000000000000000000000000000000DC |
:1076AE0000000000000000000000000000000000CC |
:1076BE000000000000000000000A014B616D6572C1 |
:1076CE0061000053706F7274000064000000803F10 |
:1076DE0017B7D13830FB103A403296020A64460092 |
:00000001FF |
/branches/salvo_gps/Basis_v0067g/trunk/Flight-Ctrl_MEGA644_V0_02a.hex |
---|
0,0 → 1,2283 |
:100000000C946C020C9489020C9489020C94890261 |
:100010000C9489020C9489020C9489020C94890234 |
:100020000C9489020C948C0C0C9489020C94890217 |
:100030000C949E150C9489020C9489020C948902EC |
:100040000C9489020C9489020C948C0B0C948902F8 |
:100050000C94B4070C9489020C94D1040C9489027A |
:100060000C94880D0C9489020C94D3140C9489027E |
:100070000A0A0D004E65757472616C004865616412 |
:10008000696E67486F6C64000A0D5374657565721C |
:10009000756E673A20004F4B0A0D000A0D416267EA |
:1000A0006C65696368204C756674647275636B7304 |
:1000B000656E736F722E2E000A0D42656E75747A2E |
:1000C0006520506172616D657465727361747A2028 |
:1000D0002564000A0D414343206E69636874206102 |
:1000E000626765676C696368656E21000A0D496E19 |
:1000F00069742E20454550524F4D3A2047656E6534 |
:1001000072696572652044656661756C742D506115 |
:1001100072616D657465722E2E2E000A0D3D3D3D97 |
:100120003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3DFF |
:100130003D3D3D3D3D3D3D3D3D3D3D000A0D466C57 |
:1001400069676874436F6E74726F6C0A0D486172F0 |
:1001500064776172653A25642E25640A0D536F66D3 |
:1001600074776172653A5625642E256425632000F4 |
:100170002E0052616E67653A2533692D253369007B |
:100180005374656C6C756E673A202533690053654E |
:1001900074706F696E742020253369005365727620 |
:1001A0006F202000506F7469343A20202533690095 |
:1001B000506F7469333A202025336900506F746999 |
:1001C000323A202025336900506F7469313A20207B |
:1001D0002533690053746172743A20202020202551 |
:1001E0003569004D657373776572743A2020253543 |
:1001F00069005269636874756E673A202025356915 |
:10020000004B6F6D70617373202020202020200030 |
:10021000456D70662E506567656C3A2535690053EB |
:1002200070616E6E756E673A202025356900486FE3 |
:1002300063682025346920282533692900526F6CB2 |
:100240006C20253469202825336929004E69636BA9 |
:100250002025346920282533692900414343202D76 |
:100260002053656E736F720047696572202534698B |
:1002700020282533692900526F6C6C2025346920B1 |
:100280002825336929004E69636B202534692028AD |
:10029000253369290047696572202534692028259E |
:1002A00033692900526F6C6C20253469202825336E |
:1002B0006929004E69636B2025346920282533693C |
:1002C00029004779726F202D2053656E736F72007D |
:1002D00050333A253469202050343A2534692000BF |
:1002E00050313A253469202050323A2534692000B3 |
:1002F00047733A253469202047693A25346920003C |
:100300004E693A2534692020526F3A25346920001D |
:100310004B373A25346920204B383A253469200080 |
:100320004B353A25346920204B363A253469200074 |
:100330004B333A25346920204B343A253469200068 |
:100340004B313A25346920204B323A25346920005C |
:100350004B6F6D706173733A202020253569005210 |
:100360006F6C6C3A202020202020253569004E69D2 |
:10037000636B3A20202020202025356900616B74B2 |
:100380002E204C6167650048F668656E726567658A |
:100390006C756E67004B65696E6520004F66662060 |
:1003A00020202020203A20253569004C7566746491 |
:1003B0007275636B3A2025356900536F6C6C486F1A |
:1003C0006568653A2025356900486F6568653A209B |
:1003D000202020202535690028632920486F6C677C |
:1003E000657220427573730053657474696E673A61 |
:1003F000202564200048573A5625642E2564205352 |
:10040000573A25642E25642563002B2B204D696BFC |
:10041000726F4B6F70746572202B2B005B25695DCA |
:100420000000001100230034004600570069007AE4 |
:10043000008B009C00AE00BF00D000E100F2000382 |
:100440000114012401350146015601660177018737 |
:10045000019701A701B601C601D501E501F4010329 |
:1004600002120221022F023E024C025A0268027559 |
:1004700002830290029D02AA02B702C302CF02DBEE |
:1004800002E702F302FE02090314031F03290333E8 |
:10049000033D0347035003590362036B0373037B5C |
:1004A0000383038A03920399039F03A603AC03B259 |
:1004B00003B703BC03C103C603CA03CE03D203D6EA |
:1004C00003D903DC03DE03E103E303E403E603E70C |
:1004D00003E703E803E8030011241FBECFEFD0E1D8 |
:1004E000DEBFCDBF13E0A0E0B1E0E0EFFBE802C06B |
:1004F00005900D92A23AB107D9F718E0A2EAB3E04D |
:1005000001C01D92A338B107E1F70E94C8020C9404 |
:10051000F7450C94000022E030E0D9010E94E34549 |
:10052000802D863028F082E0D901082E0E94EB450C |
:1005300099270895FB01282F863008F025E0842FA5 |
:100540009927429FD0011124AC59BF4F019724F045 |
:1005500001900E94EB45FACFA2E0B0E0022E0E948B |
:10056000EB450895CF93DF93FB01C42FDD27863041 |
:1005700008F085E0489FD0011124AC59BF4F219766 |
:1005800024F00E94E3450192FACFDF91CF910895C4 |
:100590001F93CF93DF9314B815B8189B02C08BE05C |
:1005A00001C08AE08093000181E887B98FEF88B9A4 |
:1005B0008BE184B981E085B98EE38AB9579A87EFD8 |
:1005C0008BB984B7877F84BF8091600088618093F6 |
:1005D00060001092600080ED97E09093C5038093D7 |
:1005E000C4031092620410926104109233071092B7 |
:1005F00032071092600410925F0410925E04109211 |
:100600005D04809100018A3011F4289801C0289A75 |
:100610000E94330D0E9407060E9489150E94820DD8 |
:100620000E94B91478941092310682E080933206C9 |
:1006300087E0809333062091000181E690E09F934C |
:100640008F9382E090E09F938F931F921F92822F4F |
:100650006AE00E947345892F99279F938F93822F79 |
:100660000E94734599279F938F938CE391E09F930A |
:100670008F931F920E94EA088BE191E09F938F93E2 |
:100680001F920E94EA08299AA1E0B0E00E94E34587 |
:10069000802D2DB73EB7205F3F4F0FB6F8943EBF79 |
:1006A0000FBE2DBF843409F43FC08CEE90E09F93C1 |
:1006B0008F931F920E94EA080E94C32310E00F90BC |
:1006C0000F900F90123049F40E94322347E46AE5FC |
:1006D00077E082E00E949A0202C0133051F40E9437 |
:1006E000A22247E46AE577E083E00E949A0214E0E0 |
:1006F00002C0143010F00E94322347E46AE577E02C |
:10070000812F0E949A021F5F1630E0F283E022E000 |
:1007100030E0D901082E0E94EB4584E4215030409E |
:10072000D901082E0E94EB45C4E0D0E0DE010E9412 |
:10073000E345802D853050F083ED90E09F938F93BB |
:100740001F920E94EA080F900F900F902297DE01EF |
:100750000E94E345802D863028F082E0DE01082EDD |
:100760000E94EB4547E46AE577E00E94B202DE01B1 |
:100770000E94E345802D863028F082E0DE01082EBD |
:100780000E94EB4599279F938F9388EB90E09F936E |
:100790008F931F920E94EA08809162070F900F903A |
:1007A0000F900F900F9080FD03C0C8EED3E020C0E3 |
:1007B0008BE990E09F938F931F920E94EA0888EE46 |
:1007C00093E00E94770CEC010E9424100F900F9090 |
:1007D0000F90CE010E94800C8823D9F386E990E027 |
:1007E0009F938F931F920E94EA080F900F900F9093 |
:1007F0000E941D21809100018A3011F4289801C0C7 |
:10080000289A80ED97E09093C5038093C40388EE07 |
:1008100093E090932C0680932B0685E58093260623 |
:1008200088E890E09F938F931F920E94EA0880913E |
:1008300062070F900F900F9082FF03C08CE790E04B |
:1008400002C084E790E09F938F931F920E94EA0872 |
:100850000F900F900F9080E790E09F938F931F92DF |
:100860000E94EA080E94681088E893E1909386034A |
:10087000809385030F900F900F908091C103882380 |
:1008800009F462C01092C1030E9453240E94D62032 |
:10089000209100012A3011F4289801C0289A8091F3 |
:1008A0000301882321F081508093030110C010922E |
:1008B000B2031092B30310927D0410927C04109244 |
:1008C0007F0410927E041092810410928004809123 |
:1008D0005C04882329F080915C04815080935C043F |
:1008E0008091850390918603892B01F585E090E046 |
:1008F00090938603809385030E946315809104037F |
:10090000909105038F5F9F4FF9F4809163048823D2 |
:10091000D9F080E197E29093C5038093C40380E807 |
:1009200090E090930503809304030EC080918503AB |
:1009300090918603019790938603809385032A30D4 |
:1009400011F4289801C0289A0E9422060E94BB0632 |
:10095000CE010E94800C882309F48FCF20910803D8 |
:1009600030910903809172079927281739079CF461 |
:1009700080910403909105038F5F9F4F61F480E79E |
:1009800097E19093C5038093C40380E093E0909334 |
:1009900005038093040384E690E00E94770CEC0149 |
:1009A0006CCF1F920F920FB60F9211248F939F93CB |
:1009B000EF93FF93809101018823E1F48091BD03BF |
:1009C0009091BE0301969093BE038093BD03FC01FA |
:1009D000E850FB4FE081ED3019F08639910539F48C |
:1009E0001092BE031092BD0381E080930101E09359 |
:1009F000C60004C01092BE031092BD03FF91EF9198 |
:100A00009F918F910F900FBE0F901F901895DC0152 |
:100A100020E030E040E050E0E8EFF4E005C08191F4 |
:100A2000280F311D4F5F5F4F4A175B07C1F73F70BB |
:100A3000C90136E0969587953A95E1F7835CFD010B |
:100A4000E850FB4F808311962F73235CFD01E85023 |
:100A5000FB4F2083A750BB4F8DE08C931092010178 |
:100A60008091F8048093C6000895EF92FF920F934F |
:100A70001F93CF93DF937A01722F93E29093F80440 |
:100A80006093F9048093FA0403E010E060E0ABEFB8 |
:100A9000B4E046C0F701E60FF11D90816F5F715021 |
:100AA00019F4E0E040E00FC0F701E60FF11D4081CE |
:100AB0006F5F715011F4E0E006C0F701E60FF11D21 |
:100AC000E0816F5F7150892F86958695835C8C934A |
:100AD0005527892F99278370907024E0880F991FDC |
:100AE0002A95E1F79A0194E0369527959A95E1F7D2 |
:100AF000822B835CED0189834F705070440F551F2A |
:100B0000440F551F8E2F8295869586958370842B72 |
:100B1000835C8A83EF73E35CEB830C5F1F4F149657 |
:100B2000772309F0B7CFC8010E940705DF91CF9165 |
:100B30001F910F91FF90EF9008951F93CF93DF9334 |
:100B4000EC0170E0A22FBB27129748C0E42FFF27CB |
:100B5000E55CF94F30814F5FE42FFF27E55CF94FEB |
:100B600050814F5FE42FFF27E55CF94F10814F5F05 |
:100B7000E42FFF27E55CF94F20814F5F842F9927F1 |
:100B8000A817B90774F15D53FE01E70FF11D3D533E |
:100B9000330F330F852F82958F70382B3083613060 |
:100BA00001F1912F9D537F5FFE01E70FF11D715001 |
:100BB0005295507F892F86958695582B5083635088 |
:100BC0006F3F79F07E5FFE01E70FF11D9295990F5F |
:100BD000990F907C2D53922B90837F5F662309F0B1 |
:100BE000B5CFDF91CF911F9108951F93182F8A30B1 |
:100BF00019F48DE00E94F5058091C00085FFFCCFBF |
:100C00001093C60080E090E01F9108950895E1ECF4 |
:100C1000F0E088E18083A0ECB0E08C9182608C935E |
:100C20008081806880838081806480838AE2809371 |
:100C3000C40088EC90E00E94770C90932506809386 |
:100C40002406089580910101882309F493C08091BE |
:100C5000A203882371F080910101882351F02BE0D9 |
:100C600046E256E06091F70487E40E943505109251 |
:100C7000A20380912406909125060E94800C88236F |
:100C800021F48091A4038823F9F080910101882345 |
:100C9000D9F022E441ED56E06091F70484E40E942B |
:100CA00035051092A4038091B5039091B603019687 |
:100CB0009093B6038093B5038AEF90E00E94770C7F |
:100CC0009093250680932406609102016F3F89F07E |
:100CD000462F552734E0440F551F3A95E1F74C5FF6 |
:100CE0005E4F605D20E181E40E9435058FEF8093C7 |
:100CF00002018091A303882359F180910101882387 |
:100D000039F10E9471101092A3033091AC03932F1C |
:100D10009F5F9093AC03943021F08091AD038823C2 |
:100D200059F026E14EE257E060E084E30E94350589 |
:100D30008FEF8093AC030CC044E1949FA001112479 |
:100D4000465E5C4F24E160E0832F8F5C0E94350596 |
:100D50008091A503882371F080910101882351F0CF |
:100D60002AE041E356E06091F70486E50E943505EC |
:100D70001092A50308951F93CF93DF93CDB7DEB7ED |
:100D800022970FB6F894DEBF0FBECDBF8091A703A8 |
:100D9000882309F4DFC08FEF8093030180913D0623 |
:100DA0008B3609F45EC08C3678F4833629F18436AC |
:100DB00020F4813609F0CCC013C0873609F45EC038 |
:100DC000883609F0C5C02BC0813709F45BC0813774 |
:100DD00008F480C08437F1F1863709F0B9C04AC001 |
:100DE0002091AA0343E062E0CE0101960E949D0596 |
:100DF000898180930201ACC02091AA0343E06BE09B |
:100E000086E296E00E949D058091F103909128066C |
:100E1000892B8093F10381E08093A40399C02091F2 |
:100E2000AA0343E062E0CE0101960E949D058091F5 |
:100E3000F1039981892B8093F1038A818F3F21F4FB |
:100E400081E08093AD0302C01092AD0381E08093F6 |
:100E5000A3037EC02091AA0343E064E08EEA93E0FE |
:100E600006C02091AA0343E063E082EB93E00E9476 |
:100E70009D056EC081E08093A5036AC081E08093E8 |
:100E8000A20366C02091AA0343E062E0CE0101966E |
:100E90000E949D0589818F3F89F0863010F085E0A2 |
:100EA000898347E46AE577E089810E94B2028981FB |
:100EB00027E44AE557E06091F70408C01091F70471 |
:100EC0000E948B0227E44AE557E0612F855B0E9470 |
:100ED00035053EC02091AA0343E067E48AE597E028 |
:100EE0000E949D0580913D0647E46AE577E08B56B8 |
:100EF0000E949A0280913D068B56A2E0B0E0082E37 |
:100F00000E94EB456091850777278827992724EC75 |
:100F100039E040E050E00E945445609387037093AD |
:100F200088038093890390938A03609186077727CB |
:100F3000882799270E94544560938B0370938C03F4 |
:100F400080938D0390938E030E948B020E94C12098 |
:100F50001092A70322960FB6F894DEBF0FBECDBF46 |
:100F6000DF91CF911F9108951F920F920FB60F92AC |
:100F700011242F933F934F935F936F937F938F939E |
:100F80009F93AF93BF93CF93DF93EF93FF938091A2 |
:100F9000C6008093A6038091A6030E94F43A409174 |
:100FA000B803463910F01092B7038091A6038D3034 |
:100FB00009F05DC08091B703823009F058C01092EB |
:100FC000B703A42FBB27FD01E75CF94F3081ED018A |
:100FD000C65CD94F28818091BB039091BC03831BD1 |
:100FE0009109821B91099F709093BC038093BB036E |
:100FF0009C01689415F8369527951694E1F7235CC3 |
:101000002093BA03982F9F73935C9093B9038081C8 |
:10101000281729F48881981711F491E006C080916F |
:10102000A9038F5F8093A90390E08091A703882391 |
:1010300009F064C0992309F461C081E08093A7039B |
:101040004093AA03A55CB94F8DE08C9380913D0637 |
:10105000823509F053C088E190E02CE00FB6F89497 |
:10106000A895809360000FBE2093600047C08091D8 |
:10107000B7038130D9F0813018F08230E9F530C003 |
:101080008091A603833239F48091A703882319F451 |
:1010900081E08093B7038091A60380933B0681E0B3 |
:1010A0008093B8038091A603992715C082E08093AE |
:1010B000B703E42FFF278091A603E55CF94F8083F7 |
:1010C0004F5F4093B8032091A6038091BB0390919A |
:1010D000BC03820F911D9093BC038093BB030EC091 |
:1010E000E42FFF278091A603E55CF94F8083463902 |
:1010F00038F31092B703E7CF1092B703FF91EF9147 |
:10110000DF91CF91BF91AF919F918F917F916F911F |
:101110005F914F913F912F910F900FBE0F901F90B5 |
:101120001895982F80911307813069F48091F0030E |
:10113000E82FFF27E65EFC4F90838F5F8093F003DC |
:1011400021E030E005C0892F0E94F505282F3327C4 |
:10115000C90108951F93182F04C080E30E949108CD |
:1011600011501116D4F31F9108951F93182F04C026 |
:1011700080E20E94910811501116D4F31F91089536 |
:101180000F931F93CF93DF938C01EB0108C0F801FD |
:101190000F5F1F4FE4918E2F0E9491082197209797 |
:1011A000B1F7DF91CF911F910F9108950F931F9386 |
:1011B000CF93DF938C01EB0106C0F80181918F0181 |
:1011C0000E94910821972097C1F7DF91CF911F913D |
:1011D0000F9108952F923F924F925F926F927F925C |
:1011E0008F929F92AF92BF92CF92DF92EF92FF9237 |
:1011F0000F931F93CF93DF93CDB7DEB7E3970FB66F |
:10120000F894DEBF0FBECDBF29968FAD299780938E |
:101210001307CE01855B9F4F9D838C832B968EADEC |
:101220009FAD2B979FA78EA722243324210102C0B4 |
:10123000130124010EA51FA502C00F5F1F4FF80167 |
:10124000F490FF2019F0F5E2FF16B9F7B8018EA56A |
:101250009FA5681B790B11F00E94C008FF2009F4BC |
:1012600042C20F5F1F4F1FA70EA71982AC81BD811D |
:101270001BAA1AAA9FEF99ABEEA5FFA5CF01019675 |
:101280009FA78EA7B49095E7B91621F08B2D8062A9 |
:10129000883789F4EBA9E0FF07C02D903D904D9071 |
:1012A0005C901397149607C08D919C9111971C0127 |
:1012B000442455241296F0E2BF1621F48981882334 |
:1012C000D9F685C083E2B81609F483C09AE2B9164C |
:1012D00021F0EDE2BE1669F408C0FD011296E0812E |
:1012E000EAABE7FFC9CFE195EAABFBA9F061FF7D6F |
:1012F00072C08BE2B81609F46AC09EE2B916B1F565 |
:101300002EA53FA52F5F3F4FEEA5FFA584918A3202 |
:1013100021F0B82E20E030E01BC0FD011296408184 |
:10132000518157FF02C04FEF5FEF49AB3FA72EA798 |
:10133000A3CFC90103E0880F991F0A95E1F7220F97 |
:10134000331F280F391F2B0D311D20533040B4900F |
:1013500031968B2D80538A3060F3FFA7EEA7A90149 |
:1013600037FF02C04FEF5FEF49AB8DCFF0E3BF1601 |
:1013700031F48BA984FD80CF80628BAB7DCF8B2D28 |
:1013800081538930E8F420E030E0C901F3E0880FB0 |
:10139000991FFA95E1F7220F331F280F391F2B0DE4 |
:1013A000311D20533040EEA5FFA5CF0101969FA728 |
:1013B0008EA7B4908B2D80538A3038F32AAB63CF3D |
:1013C00098E6B91651F4EBA9E460EBAB55CFB982BE |
:1013D00053CFFBA9F860FBAB4FCF8CE6B81621F4D6 |
:1013E0009BA991609BAB48CFBD83AC83E3E6BE165F |
:1013F00039F41296BD83AC8312978C918E8318C1F9 |
:10140000F4E4BF1639F084E6B81639F099E6B91657 |
:1014100059F503C0EBA9E160EBABFBA9F0FF08C0F5 |
:101420001496BD83AC835E904E903E902E900AC081 |
:101430001296BD83AC839E918E911C01442437FC8F |
:101440004094542C57FC03C08AE088AB92C050945F |
:10145000409430942094211C311C411C511C8DE27D |
:1014600089839AE098AB85C0EFE4BE1629F0FFE6C9 |
:10147000BF1639F488E061C09BA991609BABE8E09E |
:1014800056C0F0E7BF1671F41296BD83AC839E91EF |
:101490008E911C01442455248BA980648BAB78E782 |
:1014A000B72E5EC0E3E7BE16D9F51296BD83AC83B6 |
:1014B000DE90CE90C114D10489F488E28E838EE64A |
:1014C0008F8385E788878CE689878A8789E28B877F |
:1014D0001C8666E0C62ED12CCC0EDD1EF9A9F7FDC8 |
:1014E00013C04F2F552747FD509560E070E0C601AF |
:1014F0000E94DF43009711F419A90DC08C1919A996 |
:1015000081174CF4182F07C0F60101900020E9F76D |
:1015100031971E2F1C1919824201310140E094C0FD |
:1015200085E5B81631F095E7B91649F4EAE0E8AB7D |
:101530001FC0FBA9F160FBAB8AE088AB19C098E53E |
:10154000B91621F0E8E7BE1609F06EC0FBA9F3FD5D |
:1015500002C080E1F2CF211431044104510419F496 |
:1015600090E198AB05C0EBA9E064EBABF0E1F8AB20 |
:10157000198289A987FD03C09BA99F7D9BAB21147C |
:1015800031044104510461F4E9A9EE2349F46624CD |
:10159000772443015EE2C52ED12CCC0EDD1E3EC069 |
:1015A0004EE2C42ED12CCC0EDD1EF8A9EF2EFF2466 |
:1015B00000271127C201B101A80197010E94A64589 |
:1015C0006A3020F430E3A32EA60E08C027E5A22E31 |
:1015D000A60E88E5B81611F49FEDA922F601A29295 |
:1015E0006F01C201B101A80197010E94A64539010E |
:1015F0004A012E143F044006510618F019012A0131 |
:10160000D9CFF8A9F83051F48BA983FF07C090E334 |
:10161000A91621F080E3F60182936F01CE018C19A7 |
:10162000182F125D49A910C0BB2009F45CC0BE820E |
:1016300019824201310100E096E0C92ED12CCC0E76 |
:10164000DD1E11E021E005C0212F042F011B07FD45 |
:1016500000E08981882319F0812F8F5F07C09BA943 |
:1016600096FD02C0812F02C0822F8E5FA82EA00E91 |
:10167000EBA9EE2EFF2480E3482E512C4E205F2054 |
:101680004114510421F48AA98A190E94B50889815C |
:10169000882329F061E070E0CE01019609C0E6FEE2 |
:1016A00009C080E38A83BB8262E070E0CE010296CB |
:1016B0000E94D608F0E24F16510421F48AA98A1933 |
:1016C0000E94AA08802F0E94AA08612F772767FD31 |
:1016D0007095C6010E94D608E4FEAACD8AA98A198F |
:1016E0000E94B508A5CDE3960FB6F894DEBF0FBEF5 |
:1016F000CDBFDF91CF911F910F91FF90EF90DF90C1 |
:10170000CF90BF90AF909F908F907F906F905F90A1 |
:101710004F903F902F9008951F920F920FB60F9207 |
:1017200011242F933F935F936F937F938F939F9396 |
:10173000AF93BF938091CD0381508093CD038F3FB2 |
:1017400011F58091CB039091CC03009729F001977C |
:101750009093CC038093CB0389E08093CD03809159 |
:1017600007038F5F817080930703882319F481E05A |
:101770008093C1038091BF039091C0030196909321 |
:10178000C0038093BF038091C4039091C503029767 |
:10179000B8F08091C4039091C50301979093C5035D |
:1017A0008093C4038091C4039091C50320910403E6 |
:1017B0003091050382239323892B09F084C006C04E |
:1017C0008FEF9FEF909305038093040380910001B6 |
:1017D0008A3039F404C05A9A05C0479A03C05A980F |
:1017E00001C04798349B0AC08091C2039091C30303 |
:1017F00001969093C3038093C2036BC08091C20390 |
:101800009091C303892B09F440C08091C203909149 |
:10181000C303805A9F40C8F58FEF90E09093CC03AC |
:101820008093CB0380914A0490914B049093CA0318 |
:101830008093C9038091C2039091C303875890405D |
:1018400090934B0480934A0480914A0490914B04F6 |
:1018500097FF0AC080914A0490914B0488599E4F8B |
:1018600090934B0480934A0480914A0490914B04D6 |
:101870008856914054F080914A0490914B048856C8 |
:10188000914090934B0480934A0480914A04909134 |
:101890004B0420914C0430914D04821B930B845EC9 |
:1018A0009D4F68E671E00E949345845B9040909361 |
:1018B0004F0480934E0481E08093C8031092C303C9 |
:1018C0001092C20306C0809100018A3009F085CFD2 |
:1018D00082CFBF91AF919F918F917F916F915F91D7 |
:1018E0003F912F910F900FBE0F901F901895209150 |
:1018F000BF033091C0032F5F3F4F820F931F0895A6 |
:101900002091BF033091C003821B930B892F99272D |
:1019100086958074992708951F920F920FB60F92A3 |
:101920001124EF92FF920F931F932F933F934F93A6 |
:101930005F936F937F938F939F93AF93BF93CF9357 |
:10194000DF93EF93FF93809106038150809306030A |
:101950008F3F09F06DC083E88093B00080919C03B5 |
:10196000C82FDD27D093C703C093C60380918F078C |
:10197000E0907C0780FF1EC060910E0470910F0400 |
:101980008091100490911104FF240027112720E872 |
:1019900030E040E050E00E94C845C801B7010E9415 |
:1019A000544520E032E040E050E00E94C845C20FBC |
:1019B000D31F1DC060910E0470910F04809110041C |
:1019C00090911104FF240027112720E830E040E027 |
:1019D00050E00E94C845C801B7010E94544520E06C |
:1019E00032E040E050E00E94C845C21BD30BD093C8 |
:1019F000C703C093C6032091C6033091C7038091EB |
:101A00007D0799272817390734F080917E07992799 |
:101A10008217930724F49093C7038093C6038091A1 |
:101A2000C6038093B30080917F078093060304C0B0 |
:101A300083E08093B0005F98FF91EF91DF91CF91A9 |
:101A4000BF91AF919F918F917F916F915F914F91D6 |
:101A50003F912F911F910F91FF90EF900F900FBE2C |
:101A60000F901F9018958091BF039091C0030B9623 |
:101A70009093CF038093CE0382E085BD83EA84BD3B |
:101A800017BC88E788BD96E096BD83EC8093B000D4 |
:101A90009093B100E0E7F0E0808182608083EEE621 |
:101AA000F0E08081816080838AE08093B3001092AF |
:101AB000B20008952091BF033091C0032F5F3F4FC4 |
:101AC000280F391F4FEE02C040937A008091BF0368 |
:101AD0009091C003B901681B790B77FFF5CF08958A |
:101AE0002091BF033091C0032F5F3F4F280F391F54 |
:101AF0008091BF039091C003A901481B590B57FF68 |
:101B0000F7CF089510927C008FEE80937A000895AD |
:101B10001F920F920FB60F921124DF92EF92FF9255 |
:101B20000F931F932F933F934F935F936F937F93E5 |
:101B30008F939F93AF93BF93CF93DF93EF93FF93D5 |
:101B400010927A008091EC03D82ED394D092EC03BB |
:101B5000853009F484C0863090F4823009F440C0A6 |
:101B6000833030F48823F1F0813009F04FC22FC068 |
:101B7000833009F43FC0843009F048C258C088302F |
:101B800009F4C0C0893038F4863009F481C0873048 |
:101B900009F03CC29AC0893009F4D1C08A3009F0FA |
:101BA00035C2B1C180917800909179009093EB0398 |
:101BB0008093EA0381E08093ED038091E4039091A8 |
:101BC000E50301969093E5038093E40315C28091A9 |
:101BD0007800909179009093E9038093E80390C096 |
:101BE00080917800909179009093E7038093E603C9 |
:101BF00084E086C1409108035091090380917800E8 |
:101C0000909179009A01220F331F240F351F63E052 |
:101C100070E00E947F45260F371F36952795369531 |
:101C20002795309309032093080386E069C18091CA |
:101C30000604909107042091780030917900821B6E |
:101C4000930B90931507809314078091140790913C |
:101C500015079093D7038093D60387E051C18091F5 |
:101C60007800909179002091040430910504821B42 |
:101C7000930B9093200780931F0780911F079091EB |
:101C800020079093D9038093D8031092ED03B4C139 |
:101C9000809100012091EA033091EB038A3049F4EE |
:101CA0008091780090917900820F931F9695879587 |
:101CB00006C08091780090917900820F931F9093D5 |
:101CC000D5038093D40381E01BC180910001209152 |
:101CD000E8033091E9038A3049F4809178009091CB |
:101CE0007900820F931F9695879506C080917800A2 |
:101CF00090917900820F931F9093D3038093D20326 |
:101D000082E0FEC0809100012091E6033091E7035C |
:101D10008A3049F48091780090917900820F931F66 |
:101D20009695879506C08091780090917900820FF2 |
:101D3000931F9093D1038093D00385E0E1C060911D |
:101D4000780070917900E0900804F0900904009107 |
:101D50000A0410910B04882777FD8095982F0E9424 |
:101D60009244A80197010E94EC430E94754470932D |
:101D7000DB036093DA032091DA033091DB03E09117 |
:101D80001407F091150780911F079091200797FF86 |
:101D900003C0909581959F4F64E070E00E94934549 |
:101DA000EB01CF01F7FF03C0909581959F4F64E051 |
:101DB00070E00E949345260F371F2C0F3D1F309374 |
:101DC000DB032093DA038091DA039091DB0302971F |
:101DD00004F1609108047091090480910A049091C3 |
:101DE0000B0420E030E048E454E40E949C44882343 |
:101DF0000CF03CC0609108047091090480910A04C1 |
:101E000090910B042AE037ED43EA5CE30E94ED4336 |
:101E100025C08091DA039091DB038F5F9F4F34F5EB |
:101E2000609108047091090480910A0490910B0458 |
:101E300020E030E046E154E40E949F441816B4F4D8 |
:101E4000609108047091090480910A0490910B0438 |
:101E50002AE037ED43EA5CE30E94EC436093080418 |
:101E60007093090480930A0490930B0481E080939B |
:101E7000E103809178009091790090931707809307 |
:101E80001607209146043091470440914804509130 |
:101E900049048091DA039091DB03AA2797FDA0956E |
:101EA000BA2F280F391F4A1F5B1F20934604309317 |
:101EB00047044093480450934904E0904604F0904E |
:101EC00047040091480410914904609146047091C0 |
:101ED0004704809148049091490420E034E040E0B8 |
:101EE00050E00E94C845E21AF30A040B150BE09279 |
:101EF0004604F0924704009348041093490483E099 |
:101F00008093ED0379C0809124079091250720915B |
:101F1000780030917900820F931F9093250780936A |
:101F2000240780911C078F5F80931C0780911C07FA |
:101F3000853008F46BC0809178009091790090937F |
:101F40000F0380930E0310921C0780911807909145 |
:101F500019072091240730912507821B930B2091AC |
:101F6000640430916504821B930B9093E303809388 |
:101F7000E2036091240770912507E0900A03F09036 |
:101F80000B0300910C0310910D03882777FD8095BA |
:101F9000982FA8019701220F331F441F551F2E0DA4 |
:101FA0003F1D401F511F620F731F841F951F24E0A8 |
:101FB00030E040E050E00E94C84520930A0330938F |
:101FC0000B0340930C0350930D032091180730919D |
:101FD000190780910A0390910B03A0910C03B09113 |
:101FE0000D03281B390B3093650420936404109271 |
:101FF0002507109224070AC08091ED0380937C008E |
:10200000DD2051F08FEE80937A0006C01092ED0330 |
:102010001092EC0310927C00FF91EF91DF91CF9131 |
:10202000BF91AF919F918F917F916F915F914F91F0 |
:102030003F912F911F910F91FF90EF90DF900F90A4 |
:102040000FBE0F901F901895CF93DF93A3E0B0E0E1 |
:102050000E94E345802DC82FDD27C531D10508F04A |
:102060002A97C7BD84E690E00E945A0D80910E0326 |
:1020700090910F0382559340D0F4C0E0D0E017C098 |
:10208000C7BD82E390E00E945A0D80E791E09F93E4 |
:102090008F931F920E94EA0880910E0390910F0384 |
:1020A0000F900F900F908458934020F02196CA3FD4 |
:1020B000D10530F3A3E0B0E00C2E0E94EB45C093B5 |
:1020C00021078CE291E00E945A0DDF91CF91089593 |
:1020D000EAE1F3E080E2819393E0EA36F907D9F789 |
:1020E0000895FF920F931F938091F103282F3327B8 |
:1020F000C90181709070682F8823A9F08091F20344 |
:10210000882311F0815002C080916A038093F2030A |
:10211000EAE1F3E080E2819393E0EA36F907D9F748 |
:102120008FEF8093AC03A9014270507021FF10C063 |
:102130008091F2038F5F8093F203EAE1F3E080E2A3 |
:10214000819393E0EA36F907D9F78FEF8093AC03D8 |
:10215000662321F0452B11F01092F20381E1809368 |
:10216000F0038091F20399279F938F938CE194E081 |
:102170009F938F9311E0F12EFF920E94EA08009145 |
:10218000F2030F900F900F900F900F90053009F40D |
:10219000FCC1063090F4023009F4CCC0033030F4B6 |
:1021A0000023F1F0013009F0D9C361C0033009F414 |
:1021B00016C1043009F0D2C365C1083009F416C352 |
:1021C000093038F4063009F499C2073009F0C6C363 |
:1021D000EAC2093009F447C30A3009F0BFC381C31A |
:1021E0001092F0038AE094E09F938F93FF920E94F5 |
:1021F000EA0884E18093F0032091000181E690E0F9 |
:102200009F938F9382E090E09F938F931F921F92F2 |
:10221000822F6AE00E947345892F99279F938F939D |
:10222000822F0E94734599279F938F9385EF93E0A8 |
:102230009F938F93FF920E94EA0888E28093F003B5 |
:102240000E948B0299279F938F9388EE93E09F9330 |
:102250008F93FF920E94EA088CE38093F00388ED4D |
:1022600093E09F938F93FF920E94EA0898C2809117 |
:10227000620780FF47C01092F00380916404909140 |
:1022800065049F938F9389EC93E09F938F930F93B3 |
:102290000E94EA0884E18093F003809166049091A3 |
:1022A00067049F938F938AEB93E09F938F930F9391 |
:1022B0000E94EA0888E28093F00380910E039091D7 |
:1022C0000F039F938F938BEA93E09F938F930F93CA |
:1022D0000E94EA088CE38093F003809121079927FC |
:1022E0009F938F938CE993E09F938F930F930E941A |
:1022F000EA088DB79EB744960FB6F8949EBF0FBEFE |
:102300008DBF31C384E18093F00385E993E09F930F |
:102310008F930F930E94EA0888E28093F00387E886 |
:1023200093E09F938F930F930E94EA088DB79EB717 |
:102330000696E2CF1092F0038DE793E09F938F9380 |
:10234000FF920E94EA0884E18093F00360910E04FA |
:1023500070910F04809110049091110420E034E0FA |
:1023600040E050E00E94C8455F934F933F932F9306 |
:102370008EE693E09F938F93FF920E94EA0888E293 |
:102380008093F003609116047091170480911804F3 |
:102390009091190420E034E040E050E00E94C845EC |
:1023A0005F934F933F932F938FE593E09F938F938A |
:1023B000FF920E94EA088CE38093F00380914A0424 |
:1023C00090914B049F938F9380E593E09F938F931D |
:1023D000FF920E94EA088DB79EB746968DCF109265 |
:1023E000F0038091320790913307209130073091AC |
:1023F00031079F938F933F932F9380E493E09F93B4 |
:102400008F93FF920E94EA0884E18093F003809109 |
:1024100036079091370720913407309135079F9305 |
:102420008F933F932F9380E393E09F938F93FF923B |
:102430000E94EA0888E28093F00380913A07909125 |
:102440003B0720913807309139079F938F933F9333 |
:102450002F9380E293E09F938F93FF920E94EA086C |
:102460008CE38093F00380913E0790913F07209189 |
:102470003C0730913D079F938F933F932F9380E1CB |
:1024800093E07AC01092F003E0915B07FF27EE0F14 |
:10249000FF1FE25DF84F20813181E0915A07FF274D |
:1024A000EE0FFF1FE25DF84F808191813F932F93E4 |
:1024B0009F938F9380E093E09F938F93FF920E946E |
:1024C000EA0884E18093F003E0915D07FF27EE0FB7 |
:1024D000FF1FE25DF84F20813181E0915C07FF270B |
:1024E000EE0FFF1FE25DF84F808191813F932F93A4 |
:1024F0009F938F9380EF92E09F938F93FF920E9420 |
:10250000EA0888E28093F003E0915F07FF27EE0F6F |
:10251000FF1FE25DF84F20813181E0915E07FF27C8 |
:10252000EE0FFF1FE25DF84F808191813F932F9363 |
:102530009F938F9380EE92E09F938F93FF920E94E0 |
:10254000EA088CE38093F003E0916107FF27EE0F28 |
:10255000FF1FE25DF84F20813181E0916007FF2786 |
:10256000EE0FFF1FE25DF84F808191813F932F9323 |
:102570009F938F9380ED92E09F938F93FF920E94A1 |
:10258000EA088DB79EB74C96B7CE1092F00382EC56 |
:1025900092E09F938F93FF920E94EA080F900F9012 |
:1025A0000F90809100018A3009F04AC084E1809345 |
:1025B000F0034091FA035091FB038091D003909176 |
:1025C000D1032091FA033091FB035F934F93821B59 |
:1025D000930B9F938F9383EB92E09F938F93FF9244 |
:1025E0000E94EA0888E28093F0034091FC03509136 |
:1025F000FD038091D2039091D3032091FC0330918D |
:10260000FD035F934F93821B930B9F938F9384EAF9 |
:1026100092E09F938F93FF920E94EA088CE380934D |
:10262000F0038091FE039091FF032091CF0730913A |
:10263000D0079F938F933F932F9385E992E055C0E6 |
:1026400084E18093F0038091FA039091FB03209141 |
:10265000D0033091D103E091FA03F091FB0362E0E3 |
:1026600070E00E9493457F936F932E1B3F0B3F9327 |
:102670002F9386E892E09F938F93FF920E94EA083F |
:1026800088E28093F0038091FC039091FD032091F8 |
:10269000D2033091D303E091FC03F091FD0362E09B |
:1026A00070E00E9493457F936F932E1B3F0B3F93E7 |
:1026B0002F9387E792E09F938F93FF920E94EA08FF |
:1026C0008CE38093F0038091FE039091FF032091AF |
:1026D000CF073091D00762E070E00E9493457F936E |
:1026E0006F933F932F9388E692E09F938F93FF928F |
:1026F0000E94EA088DB79EB74596FECD1092F00372 |
:102700008BE592E09F938F93FF920E94EA0884E109 |
:102710008093F00380910404909105042091D803E4 |
:102720003091D9039F938F933F932F938CE492E042 |
:102730009F938F93FF920E94EA0888E28093F003B0 |
:1027400080910604909107042091D6033091D7031D |
:102750009F938F933F932F938DE392E09F938F935B |
:10276000FF920E94EA088CE38093F00360910804D2 |
:102770007091090480910A0490910B040091B307B1 |
:102780001091B4070E9475447F936F931F930F932A |
:102790008EE292E09F938F93FF920E94EA088DB79A |
:1027A0009EB74896A9CD84E18093F00380910803F9 |
:1027B000909109039F938F938FE192E09F938F9362 |
:1027C000FF920E94EA0888E28093F00380915C0403 |
:1027D00099279F938F9380E192E09F938F93FF922D |
:1027E0000E94EA088DB79EB70A9686CD1092F00334 |
:1027F00081E092E09F938F93FF920E94EA0884E128 |
:102800008093F00380914E0490914F049F938F9397 |
:1028100082EF91E09F938F93FF920E94EA0888E2F3 |
:102820008093F00380914A0490914B049F938F937F |
:1028300083EE91E09F938F93FF920E94EA088CE3CE |
:102840008093F00380914C0490914D049F938F935B |
:1028500084ED91E09F938F93FF920E94EA088DB7D9 |
:102860009EB7429649CD1092F00380915404909106 |
:1028700055049F938F9388EC91E09F938F93FF92E1 |
:102880000E94EA0884E18093F003809156049091BD |
:1028900057049F938F938CEB91E09F938F93FF92BC |
:1028A0000E94EA0888E28093F00380915804909196 |
:1028B00059049F938F9380EB91E09F938F93FF92A6 |
:1028C0000E94EA088CE38093F00380915A0490916F |
:1028D0005B049F938F9384EA91E09F938F93FF9281 |
:1028E00006CD1092F0038CE991E09F938F93FF92B5 |
:1028F0000E94EA0884E18093F00380919C03992769 |
:102900009F938F938EE891E09F938F93FF920E9405 |
:10291000EA0888E28093F0038091C6039091C70390 |
:102920009F938F9380E891E09F938F93FF920E94F3 |
:10293000EA088CE38093F00380917E0799279F93A8 |
:102940008F9380917D0799279F938F9382E791E0E2 |
:102950009F938F93FF920E94EA08CBCC0150009383 |
:102960006A031092F2031092F1031F910F91FF90EE |
:1029700008951092B9008AE28093B800089585EA1C |
:102980008093BC0080E090E0089584E98093BC00CF |
:1029900008951092B9008093BB0085E88093BC0035 |
:1029A00080E090E008951F920F920FB60F921124CD |
:1029B0008F939F93EF93FF938091F3038F5F8093A7 |
:1029C000F30381508330A9F1843028F4813091F0F1 |
:1029D000823008F50AC0853089F18530B8F186303B |
:1029E000A9F1873009F061C045C08091F403880FD8 |
:1029F0008E5A09C08091F4038F5F8093F403815055 |
:102A000027C08091A4071092B9008093BB0085E88D |
:102A10008093BC004AC084E98093BC008091F40399 |
:102A2000843018F41092F30302C01092F40385EA84 |
:102A3000EFCF8091F503880F8D5AE5CF8091BB00D1 |
:102A4000E091F503FF27EA5DF84F80838091F5035D |
:102A5000813039F08130A8F2823031F0833029F5AD |
:102A600006C08091A907CFCF8091C507CCCF8091B8 |
:102A7000C907C9CF8091F5039091BB00E82FFF27CC |
:102A8000EA5DF84F94838F5F8093F503843010F0F4 |
:102A90001092F50384E98093BC008AE090E0909363 |
:102AA0008603809385031092F3038091BC008068B5 |
:102AB0008093BC00FF91EF919F918F910F900FBE7B |
:102AC0000F901F9018954CEB50E084E9DA018C933D |
:102AD0001092F3032BEB30E0F90180811092F403A4 |
:102AE00080E88C931092BD001092BA001082E9EB3E |
:102AF000F0E01082A8EBB0E01C9210828AE28C9386 |
:102B000085EADA018C931082F901108285E88C93B2 |
:102B1000089583EC80938100EFE6F0E0808180628D |
:102B200080831092FF031092FE031092FD03109217 |
:102B3000FC031092FB031092FA0308951F920F9268 |
:102B40000FB60F9211240F931F932F933F934F9320 |
:102B50005F936F937F938F939F93AF93BF93CF9325 |
:102B6000DF93EF93FF93209186003091870080914F |
:102B7000F8039091F903281B390B809186009091FE |
:102B800087009093F9038093F803C9018D54944012 |
:102B9000C091F603D091F703835F9A4158F42497CC |
:102BA00014F010926B0381E090E09093F703809310 |
:102BB000F60363C0CA30D1050CF05FC0C9018B5F5A |
:102BC0009040845B914008F040C0A901425D5140B3 |
:102BD000FE01EE0FFF1FE25DF84F80819181FA0147 |
:102BE000E81BF90BCF01F7FF03C0909581959F4F2C |
:102BF00006974CF480915C04883C28F480915C0436 |
:102C0000865F80935C04FE01EE0FFF1F8F01025D63 |
:102C1000184FD8012D913C91C901880F991F820F3F |
:102C2000931F840F951F64E070E00E949345D801C4 |
:102C30008D919C9111979B01281B390BEC5BF84FF0 |
:102C40003183208311967C936E93FE013196F0932D |
:102C5000F703E093F603E530F10519F45D9A5C980B |
:102C60000BC05D98E630F10511F45C9A05C05C98E4 |
:102C7000379711F45B9A01C05B98FF91EF91DF9158 |
:102C8000CF91BF91AF919F918F917F916F915F9104 |
:102C90004F913F912F911F910F910F900FBE0F9069 |
:102CA0001F9018952F923F924F925F926F927F9252 |
:102CB0008F929F92AF92BF92CF92DF92EF92FF924C |
:102CC0000F931F93CF93DF93CDB7DEB722970FB645 |
:102CD000F894DEBF0FBECDBF8091FE039091FF033D |
:102CE0002091D4033091D503821B930B9093D0078E |
:102CF0008093CF078091D2039091D3032091FC035E |
:102D00003091FD03821B930B9093A3078093A2073E |
:102D10008091D0039091D1032091FA033091FB036D |
:102D2000821B930B9093AB078093AA07E090CC078C |
:102D3000F090CD076091D8037091D9030027F7FC7C |
:102D40000095102F882777FD8095982F2CE030E094 |
:102D500040E050E00E945445E60EF71E081F191F80 |
:102D6000C801B70122E030E040E050E00E94C845D1 |
:102D70003093CD072093CC07E090D607F090D7078B |
:102D80006091D6037091D7030027F7FC0095102FB0 |
:102D9000882777FD8095982F2CE030E040E050E0C8 |
:102DA0000E945445E60EF71E081F191FC801B701FF |
:102DB00022E030E040E050E00E94C8453093D70761 |
:102DC0002093D6076091B3077091B4072091DA037E |
:102DD0003091DB03882777FD8095982F442737FDB6 |
:102DE0004095542F620F731F841F951F22E030E01F |
:102DF00040E050E00E94C8453093B4072093B307E9 |
:102E000020911E0430911F04409120045091210410 |
:102E10006091D8037091D903CB01880F991F860F59 |
:102E2000971F880F991F880F991FAA2797FDA095B4 |
:102E3000BA2F280F391F4A1F5B1F20931E0430939F |
:102E40001F044093200450932104209122043091C8 |
:102E5000230440912404509125046091D60370917D |
:102E6000D703CB01880F991F860F971F880F991FD3 |
:102E7000880F991FAA2797FDA095BA2F280F391FF1 |
:102E80004A1F5B1F209322043093230440932404A1 |
:102E900050932504609126047091270480912804A2 |
:102EA00090912904E0901607F0901707A09008046D |
:102EB000B0900904C0900A04D0900B040E94924480 |
:102EC0003B014C010027F7FC0095102FC801B7010A |
:102ED0000E949244A60195010E94EC439B01AC0123 |
:102EE000C401B3010E94ED430E947544609326041F |
:102EF0007093270480932804909329042091DD0780 |
:102F00003091DE074091DF075091E0078091CF07B5 |
:102F10009091D007AA2797FDA095BA2F280F391FA7 |
:102F20004A1F5B1F2093DD073093DE074093DF07C6 |
:102F30005093E00720913E0430913F0440914004BB |
:102F4000509141048091CF079091D007AA2797FD17 |
:102F5000A095BA2F280F391F4A1F5B1F20933E04EC |
:102F600030933F0440934004509341042091420425 |
:102F70003091430440914404509145048091CF071F |
:102F80009091D007AA2797FDA095BA2F280F391F37 |
:102F90004A1F5B1F20934204309343044093440430 |
:102FA0005093450420916C042A83222309F06BC0BE |
:102FB00080916D04882309F066C08091620786FFC6 |
:102FC00062C060912E0470912F0480913004909122 |
:102FD0003104E090CF07F090D007A0907A04BB2492 |
:102FE000CC24DD2420E030E140E050E00E94C845E0 |
:102FF0000027F7FC0095102FCA01B901A80197011D |
:103000000E945445A60195010E94544520E038E0F5 |
:1030100040E050E00E94C8452093C5043093C604A8 |
:103020004093C7045093C8046091360470913704EC |
:103030008091380490913904E090CF07F090D00748 |
:1030400020E030E140E050E00E94C8450027F7FC56 |
:103050000095102FCA01B901A80197010E9454459B |
:10306000A60195010E94544520E038E040E050E080 |
:103070000E94C8452093C1043093C2044093C30406 |
:103080005093C40410C01092C1041092C204109254 |
:10309000C3041092C4041092C5041092C604109286 |
:1030A000C7041092C8048091A2079091A3072090B2 |
:1030B000C5043090C6044090C7045090C804820DE7 |
:1030C000931D9093A3078093A2070091A2071091EC |
:1030D000A307A090C104B090C204C090C304D090D4 |
:1030E000C40480917B04682E772488249924C60127 |
:1030F000B501A40193010E94544520E032E040E074 |
:1031000050E00E94C845020F131F1093A3070093BD |
:10311000A20720913A0430913B0440913C04509125 |
:103120003D048091A2079091A307AA2797FDA0953F |
:10313000BA2F280F391F4A1F5B1F20933A04309380 |
:103140003B0440933C0450933D042091360430915D |
:10315000370440913804509139048091A20790912E |
:10316000A3076091680470916904861B970BAA27D6 |
:1031700097FDA095BA2F280F391F4A1F5B1F209378 |
:1031800036043093370440933804509339048091C7 |
:10319000360490913704A0913804B0913904E0903E |
:1031A0008B03F0908C0300918D0310918E03E81631 |
:1031B000F9060A071B0704F580E197E2A0E0B0E0FA |
:1031C0008E199F09A00BB10B80933604909337049E |
:1031D000A0933804B0933904809136049091370459 |
:1031E000A0913804B091390480933A0490933B0441 |
:1031F000A0933C04B0933D042091360430913704F1 |
:10320000409138045091390488279927DC018E19A0 |
:103210009F09A00BB10B281739074A075B0704F574 |
:1032200080EF98EDAFEFBFEFE80EF91E0A1F1B1FEE |
:10323000E0923604F0923704009338041093390476 |
:103240008091360490913704A0913804B0913904EC |
:1032500080933A0490933B04A0933C04B0933D04C4 |
:103260008091D2039091D3030F9734F488E19CEFBF |
:103270009093A3078093A2078091D2039091D303E8 |
:10328000079734F480E398EF9093A3078093A20705 |
:103290009091000199839A30A9F48091D203909182 |
:1032A000D303835F934034F088EE93E09093A307B9 |
:1032B0008093A2078091D2039091D3038A5F9340B9 |
:1032C000DCF014C08091D2039091D303855E9740C7 |
:1032D00034F088EE93E09093A3078093A207809147 |
:1032E000D2039091D303835F974034F080ED97E051 |
:1032F0009093A3078093A2078091AA079091AB07B0 |
:103300008A199B099093AB078093AA070091AA079B |
:103310001091AB07C201B101A40193010E94544571 |
:1033200020E032E040E050E00E94C845021B130B51 |
:103330001093AB070093AA07209132043091330415 |
:1033400040913404509135048091AA079091AB07C5 |
:10335000AA2797FDA095BA2F280F391F4A1F5B1F78 |
:103360002093320430933304409334045093350453 |
:1033700020912E0430912F0440913004509131045B |
:103380008091AA079091AB0760916A0470916B04D9 |
:10339000861B970BAA2797FDA095BA2F280F391FD8 |
:1033A0004A1F5B1F20932E0430932F044093300458 |
:1033B0005093310480912E0490912F04A0913004F9 |
:1033C000B0913104E0908703F09088030091890365 |
:1033D00010918A03E816F9060A071B0704F580E135 |
:1033E00097E2A0E0B0E08E199F09A00BB10B80938B |
:1033F0002E0490932F04A0933004B0933104809155 |
:103400002E0490912F04A0913004B0913104809348 |
:10341000320490933304A0933404B0933504209184 |
:103420002E0430912F0440913004509131048827AC |
:103430009927DC018E199F09A00BB10B28173907BA |
:103440004A075B0704F580EF98EDAFEFBFEFE80E9A |
:10345000F91E0A1F1B1FE0922E04F0922F04009306 |
:1034600030041093310480912E0490912F04A09188 |
:103470003004B09131048093320490933304A093CC |
:103480003404B09335048091D0039091D1030F9709 |
:1034900034F488E19CEF9093AB078093AA07809166 |
:1034A000D0039091D103079734F480E398EF909381 |
:1034B000AB078093AA0799819A30A9F48091D00331 |
:1034C0009091D103835F934034F088EE93E0909322 |
:1034D000AB078093AA078091D0039091D1038A5FB4 |
:1034E0009340DCF014C08091D0039091D103855EAD |
:1034F000974034F088EE93E09093AB078093AA074F |
:103500008091D0039091D103835F974034F080ED98 |
:1035100097E09093AB078093AA078FEE80937A0091 |
:1035200080913E0490913F04A0914004B0914104E9 |
:1035300080932A0490932B04A0932C04B0932D0421 |
:1035400080912E0490912F04A0913004B091310409 |
:1035500080930E0490930F04A0931004B093110471 |
:103560008091360490913704A0913804B0913904C9 |
:103570008093160490931704A0931804B093190431 |
:103580008091320490913304A0913404B0913504B9 |
:103590008093120490931304A0931404B093150421 |
:1035A00080913A0490913B04A0913C04B0913D0479 |
:1035B00080931A0490931B04A0931C04B0931D04E1 |
:1035C0008091620787FF6BC02A81222309F067C0C0 |
:1035D00080916D04882309F062C08091AA079091C0 |
:1035E000AB07893C91057CF02091AA073091AB078D |
:1035F0008091AA079091AB07880F991F880F991F98 |
:103600002052334015C08091AA079091AB07885390 |
:103610009F4FA4F42091AA073091AB078091AA078D |
:103620009091AB07880F991F880F991F205E3C4F20 |
:10363000820F931F9093AB078093AA078091A207F4 |
:103640009091A307893C91057CF02091A2073091CD |
:10365000A3078091A2079091A307880F991F880F55 |
:10366000991F2052334015C08091A2079091A30763 |
:1036700088539F4FA4F42091A2073091A307809113 |
:10368000A2079091A307880F991F880F991F205EAA |
:103690003C4F820F931F9093A3078093A207209122 |
:1036A00054043091550480915E07E82FFF27EE0FF8 |
:1036B000FF1FE25DF84F8081918182599F4F28174B |
:1036C00039071CF42F5F3F4F0CC0808191818259D4 |
:1036D0009F4F821793074CF42115310531F021508B |
:1036E0003040309355042093540420915604309177 |
:1036F000570480915F07E82FFF27EE0FFF1FE25D61 |
:10370000F84F8081918182599F4F281739071CF407 |
:103710002F5F3F4F0CC08081918182599F4F82174C |
:1037200093074CF42115310531F02150304030938E |
:1037300057042093560420915804309159048091E5 |
:103740006007E82FFF27EE0FFF1FE25DF84F808133 |
:10375000918182599F4F281739071CF42F5F3F4FE3 |
:103760000CC08081918182599F4F821793074CF43E |
:103770002115310531F02150304030935904209308 |
:10378000580420915A0430915B0480916107E82F1E |
:10379000FF27EE0FFF1FE25DF84F80819181825974 |
:1037A0009F4F281739071CF42F5F3F4F0CC08081B3 |
:1037B000918182599F4F821793074CF4211531054F |
:1037C00031F02150304030935B0420935A048091B3 |
:1037D00054049091550497FF05C01092550410921F |
:1037E00054040AC08F3F910539F034F08FEF90E018 |
:1037F00090935504809354048091560490915704FB |
:1038000097FF05C010925704109256040AC08F3FCC |
:10381000910539F034F08FEF90E090935704809346 |
:103820005604809158049091590497FF05C0109256 |
:103830005904109258040AC08F3F910539F034F0B2 |
:103840008FEF90E0909359048093580480915A042C |
:1038500090915B0497FF05C010925B0410925A048C |
:103860000AC08F3F910539F034F08FEF90E09093CC |
:103870005B0480935A0422960FB6F894DEBF0FBE05 |
:10388000CDBFDF91CF911F910F91FF90EF90DF900F |
:10389000CF90BF90AF909F908F907F906F905F90F0 |
:1038A0004F903F902F90089510927A008091D0030E |
:1038B0009091D1039093AB078093AA078091D20394 |
:1038C0009091D3039093A3078093A2078091D40390 |
:1038D0009091D5039093D0078093CF076091D80340 |
:1038E0007091D903882777FD8095982F2CE030E0E0 |
:1038F00040E050E00E9454457093CD076093CC07A0 |
:103900006091D6037091D703882777FD8095982F13 |
:103910000E9454457093D7076093D6078091DA03CD |
:103920009091DB039093B4078093B3078FEE80935D |
:103930007A00209154043091550480915E07E82F5D |
:10394000FF27EE0FFF1FE25DF84F808191818259C2 |
:103950009F4F281739071CF42F5F3F4F0CC0808101 |
:10396000918182599F4F821793074CF4211531059D |
:1039700031F021503040309355042093540420916D |
:1039800056043091570480915F07E82FFF27EE0F10 |
:10399000FF1FE25DF84F8081918182599F4F281768 |
:1039A00039071CF42F5F3F4F0CC0808191818259F1 |
:1039B0009F4F821793074CF42115310531F02150A8 |
:1039C000304030935704209356042091580430918E |
:1039D000590480916007E82FFF27EE0FFF1FE25D7B |
:1039E000F84F8081918182599F4F281739071CF425 |
:1039F0002F5F3F4F0CC08081918182599F4F82176A |
:103A000093074CF42115310531F0215030403093AB |
:103A100059042093580420915A0430915B048091FA |
:103A20006107E82FFF27EE0FFF1FE25DF84F80814F |
:103A3000918182599F4F281739071CF42F5F3F4F00 |
:103A40000CC08081918182599F4F821793074CF45B |
:103A50002115310531F02150304030935B04209323 |
:103A60005A04809154049091550497FF05C0109218 |
:103A70005504109254040AC08F3F910539F034F078 |
:103A80008FEF90E0909355048093540480915604F6 |
:103A90009091570497FF05C0109257041092560456 |
:103AA0000AC08F3F910539F034F08FEF90E090938A |
:103AB000570480935604809158049091590497FFBD |
:103AC00005C010925904109258040AC08F3F910506 |
:103AD00039F034F08FEF90E09093590480935804BC |
:103AE00080915A0490915B0497FF05C010925B048B |
:103AF00010925A040AC08F3F910539F034F08FEFCD |
:103B000090E090935B0480935A0460918507772737 |
:103B10008827992724EC39E040E050E00E94544582 |
:103B200060938703709388038093890390938A033B |
:103B300060938B0370938C0380938D0390938E031B |
:103B400008951F93809165078B3F98F08B3F19F480 |
:103B5000809154040EC08C3F19F48091560409C022 |
:103B60008D3F19F48091580404C08E3F21F4809158 |
:103B70005A048093940380919403882319F410923B |
:103B8000940304C08F3F11F48093940380916407E1 |
:103B90008B3F98F08B3F19F4809154040EC08C3FFA |
:103BA00019F48091560409C08D3F19F4809158048E |
:103BB00004C08E3F21F480915A0480939303809136 |
:103BC0009303882319F41092930305C0843618F0E8 |
:103BD00084E680939303809166078B3F98F08B3F38 |
:103BE00019F4809154040EC08C3F19F4809156044E |
:103BF00009C08D3F19F48091580404C08E3F21F410 |
:103C000080915A048093950380919503882319F439 |
:103C10001092950305C0843618F084E680939503CE |
:103C2000809168078B3F98F08B3F19F48091540482 |
:103C30000EC08C3F19F48091560409C08D3F19F4D1 |
:103C40008091580404C08E3F21F480915A048093DF |
:103C5000960380919603882319F41092960304C06A |
:103C60008F3F11F48093960380916F078B3F98F0FC |
:103C70008B3F19F4809154040EC08C3F19F480914D |
:103C8000560409C08D3F19F48091580404C08E3F3A |
:103C900021F480915A04809397038091970388239D |
:103CA00019F41092970304C08F3F11F48093970387 |
:103CB000809170078B3F98F08B3F19F480915404EA |
:103CC0000EC08C3F19F48091560409C08D3F19F441 |
:103CD0008091580404C08E3F21F480915A0480934F |
:103CE0009803809198038B3010F48AE002C08F3FD4 |
:103CF00011F480939803809171078B3F98F08B3F6C |
:103D000019F4809154040EC08C3F19F4809156042C |
:103D100009C08D3F19F48091580404C08E3F21F4EE |
:103D200080915A048093990380919903882319F410 |
:103D30001092990304C08F3F11F4809399038091EE |
:103D400076078B3F98F08B3F19F4809154040EC096 |
:103D50008C3F19F48091560409C08D3F19F480916D |
:103D6000580404C08E3F21F480915A0480939B0331 |
:103D700080919B03882319F410929B0304C08F3F0A |
:103D800011F480939B03809177078B3F98F08B3FD2 |
:103D900019F4809154040EC08C3F19F4809156049C |
:103DA00009C08D3F19F48091580404C08E3F21F45E |
:103DB00080915A048093720480917204882319F4CC |
:103DC0001092720404C08F3F11F4809372048091AA |
:103DD00078078B3F98F08B3F19F4809154040EC004 |
:103DE0008C3F19F48091560409C08D3F19F48091DD |
:103DF000580404C08E3F21F480915A0480937304C8 |
:103E000080917304882319F41092730404C08F3FC7 |
:103E100011F480937304809179078B3F98F08B3F66 |
:103E200019F4809154040EC08C3F19F4809156040B |
:103E300009C08D3F19F48091580404C08E3F21F4CD |
:103E400080915A048093740480917404882319F437 |
:103E50001092740404C08F3F11F480937404809115 |
:103E60007A078B3F98F08B3F19F4809154040EC071 |
:103E70008C3F19F48091560409C08D3F19F480914C |
:103E8000580404C08E3F21F480915A048093750435 |
:103E900080917504882319F41092750404C08F3F33 |
:103EA00011F48093750480918A078B3F98F08B3FC3 |
:103EB00019F4809154040EC08C3F19F4809156047B |
:103EC00009C08D3F19F48091580404C08E3F21F43D |
:103ED00080915A048093760480917604882319F4A3 |
:103EE0001092760404C08F3F11F480937604809181 |
:103EF0008B078B3F98F08B3F19F4809154040EC0D0 |
:103F00008C3F19F48091560409C08D3F19F48091BB |
:103F1000580404C08E3F21F480915A0480937704A2 |
:103F200080917704882319F41092770404C08F3F9E |
:103F300011F48093770480918C078B3F98F08B3F2E |
:103F400019F4809154040EC08C3F19F480915604EA |
:103F500009C08D3F19F48091580404C08E3F21F4AC |
:103F600080915A048093780480917804882319F40E |
:103F70001092780404C08F3F11F4809378048091EC |
:103F80008D078B3F98F08B3F19F4809154040EC03D |
:103F90008C3F19F48091560409C08D3F19F480912B |
:103FA000580404C08E3F21F480915A048093790410 |
:103FB00080917904882319F41092790404C08F3F0A |
:103FC00011F48093790480917B078B3F98F08B3FAD |
:103FD00019F4809154040EC08C3F19F4809156045A |
:103FE00009C08D3F19F48091580404C08E3F21F41C |
:103FF00080915A0480939C0380919C03882319F438 |
:1040000010929C0304C08F3F11F480939C03809115 |
:1040100080078B3F98F08B3F19F4809154040EC0B9 |
:104020008C3F19F48091560409C08D3F19F480919A |
:10403000580404C08E3F21F480915A0480939D035C |
:1040400080919D03882319F410929D0304C08F3F33 |
:1040500011F480939D03809183078B3F98F08B3FF1 |
:1040600019F4809154040EC08C3F19F480915604C9 |
:1040700009C08D3F19F48091580404C08E3F21F48B |
:1040800080915A0480937A0480917A04882319F4E9 |
:1040900010927A0404C08F3F11F480937A048091C7 |
:1040A00084078B3F98F08B3F19F4809154040EC025 |
:1040B0008C3F19F48091560409C08D3F19F480910A |
:1040C000580404C08E3F21F480915A0480937B04ED |
:1040D00080917B04882319F410927B0404C08F3FE5 |
:1040E00011F480937B04809189078B3F98F08B3F7C |
:1040F00019F4809154040EC08C3F19F48091560439 |
:1041000009C08D3F19F48091580404C08E3F21F4FA |
:1041100080915A0480939E0380919E03882319F412 |
:1041200010929E0304C08F3F11F480939E03109160 |
:104130009B03612F772767FD7095872F972F0E942C |
:10414000924417FF06C020E030E040E853E40E94AC |
:10415000ED4327E137EB41ED58E30E940C456093B6 |
:104160008F037093900380939103909392038091B7 |
:104170006D078093CE0780916C078093AC071F91E9 |
:1041800008951F93182F0EC080916304882361F453 |
:1041900084E690E09093C5038093C4038AEF90E097 |
:1041A0000E94700D115080F71F9108958091630453 |
:1041B000882301F51092A9071092A4071092C50751 |
:1041C0001092C9078091AE03882311F08093A40751 |
:1041D0008091AF03882311F08093A9078091B003E9 |
:1041E000882311F08093C9078091B103882311F0CF |
:1041F0008093C5078091A40799279093EC0680933C |
:10420000EB068091A90799279093EE068093ED061F |
:104210008091C90799279093F0068093EF068091CB |
:10422000C50799279093F2068093F1061092F30345 |
:104230001092F4030E94BF14089510920504109286 |
:104240000404109207041092060480E090E0A0E0BD |
:10425000B0E08093080490930904A0930A04B093FB |
:104260000B041092FB031092FA031092FD031092BC |
:10427000FC031092FF031092FE0310927A04109236 |
:104280007B040E94541C84E690E00E945A0D0E9418 |
:10429000541C8091620780FF10C080910E039091A2 |
:1042A0000F03875B934038F480910E0390910F03C6 |
:1042B0008E5E924010F40E9424108091D003909161 |
:1042C000D1039093FB038093FA038091D2039091E2 |
:1042D000D3039093FD038093FC038091D4039091CA |
:1042E000D5039093FF038093FE038091FC0390918C |
:1042F000FD0390930104809300048091FA03909150 |
:10430000FB03909303048093020444E050E0DA013D |
:104310000E94E345802D853038F18091D607909139 |
:10432000D70797FF03C0909581959F4F6CE070E091 |
:104330000E94934570930704609306048091CC0714 |
:104340009091CD0797FF03C0909581959F4F6CE0AA |
:1043500070E00E949345709305046093040460919B |
:1043600016077091170739C0DA010E94E345802DC6 |
:104370004F5F5F4FDA010E94E345202D9927982F68 |
:104380008827820F911D90930504809304044F5F4A |
:104390005F4FDA010E94E345802D4F5F5F4FDA01E6 |
:1043A0000E94E345202D9927982F8827820F911D81 |
:1043B00090930704809306044F5F5F4FDA010E94D9 |
:1043C000E345602D4F5F5F4FDA010E94E345202DEA |
:1043D0007727762F6627620F711D882777FD8095D6 |
:1043E000982F0E949244609308047093090480936C |
:1043F0000A0490930B0410922E0410922F04109232 |
:10440000300410923104109232041092330410924E |
:10441000340410923504109236041092370410922E |
:1044200038041092390410923A0410923B0410920E |
:104430003C0410923D0410923E0410923F041092EE |
:104440004004109241041092AB071092AA071092F8 |
:10445000A3071092A2071092D0071092CF07809165 |
:104460000A0390910B03A0910C03B0910D0390935C |
:104470001907809318071092E3031092E203109239 |
:104480004604109247041092480410924904809107 |
:104490004A0490914B0490934D0480934C040E94E5 |
:1044A0009D3982E390E09093C5038093C4036091AB |
:1044B000850777278827992724EC39E040E050E0EA |
:1044C0000E94544560938703709388038093890307 |
:1044D00090938A03609186077727882799270E94FF |
:1044E000544560938B0370938C0380938D0390935A |
:1044F0008E031092A00310929F0320914A043091E2 |
:104500004B0482EE94E0AC01249FC001259F900DE6 |
:10451000349F900D1124AA2797FDA095BA2F809360 |
:10452000DD079093DE07A093DF07B093E0078EE1ED |
:1045300090E09093CC048093CB049093CA04809332 |
:10454000C904089581E080935A0752E050935B07B5 |
:1045500043E040935C0774E070935D0765E060930F |
:104560005E0786E080935F0787E08093600798E0AE |
:104570009093610780EC809362078EE180936307DC |
:104580008BEF809365073AE03093660722E3209330 |
:104590006407209368075093670740936907109258 |
:1045A0006A0790936B078FE080936C078AEF809384 |
:1045B0006D078AE180936E0780E880936F0788EC2F |
:1045C000809370078FEA8093710794E69093720747 |
:1045D0008FE5809373078CE38093740710927507BF |
:1045E0003093760780E580937707109278071092D2 |
:1045F000790710927A0710928A0710928B0710920F |
:104600008C0710928D0790937B0788E280937C073C |
:1046100010928F0720937D0786E980937E07609331 |
:104620007F07209380078AE5809381072093820784 |
:1046300010928E0790938307309384079093850799 |
:104640009093860790938707709388072093890734 |
:10465000A4E9B7E0ECE6F3E08CE001900D92815024 |
:10466000E1F7089581E080935A0792E090935B0709 |
:1046700083E080935C0744E040935D0755E05093EE |
:104680005E0786E080935F0787E08093600788E09D |
:104690008093610780E4809362078EE180936307D3 |
:1046A0008BEF809365073AE03093660722E320930F |
:1046B00064072093680790936707409369071092F7 |
:1046C0006A0730936B078FE080936C078AEF8093C3 |
:1046D0006D078AE180936E0780E880936F078FEA09 |
:1046E000809370078093710794E6909372078FE52B |
:1046F000809373078CE3809374071092750780E2B0 |
:104700008093760780E58093770710927807109260 |
:10471000790710927A0710928A0710928B071092ED |
:104720008C0710928D0790937B0788E280937C071B |
:1047300010928F0720937D0786E980937E07509320 |
:104740007F07209380078AE5809381072093820763 |
:1047500010928E0790938307309384079093850778 |
:104760009093860790938707409388078BE4809304 |
:104770008907A4E9B7E0E6E7F3E08CE001900D9249 |
:104780008150E1F7089581E080935A0782E0809399 |
:104790005B0783E080935C0734E030935D0765E05E |
:1047A00060935E0786E080935F0787E080936007F1 |
:1047B00098E09093610780E4809362078EE1809394 |
:1047C00063078BEF809365075AE05093660722E3F7 |
:1047D0002093640720936807309367073093690735 |
:1047E00090936A078EE080936B078FE080936C074D |
:1047F0008AEF80936D078AE180936E0780E880934B |
:104800006F0788E78093700746E94093710794E645 |
:10481000909372078FE5809373078CE380937407FE |
:104820001092750780E280937607109277071092B6 |
:1048300078071092790710927A0710928A071092DF |
:104840008B0710928C0710928D0790937B0788E25C |
:1048500080937C0710928F0720937D0740937E07FB |
:1048600060937F07209380078AE5809381072093D8 |
:10487000820710928E07909383075093840790933A |
:104880008507909386072093870730938807909336 |
:104890008907A4E9B7E0EEE7F3E08CE001900D9220 |
:1048A0008150E1F708952F923F924F925F926F925D |
:1048B0007F928F929F92AF92BF92CF92DF92EF92B0 |
:1048C000FF920F931F93CF93DF93CDB7DEB7669719 |
:1048D0000FB6F894DEBF0FBECDBF0E945216809176 |
:1048E000540890915508009729F001979093550826 |
:1048F000809354080E94693A892B39F48091000111 |
:104900008A3011F4289A01C02898299A299AE091AE |
:104910005C07FF27EE0FFF1FE25DF84F0190F0816B |
:10492000E02DE858FF4F8091CE07082F1127045142 |
:104930001040E017F1070CF48F012091080330912B |
:104940000903809172079927029740918204509140 |
:10495000830482179307ACF122E04D3B520714F118 |
:104960001092830410928204E091C904F091CA0469 |
:104970002091CB043091CC04C901880F991F820F7C |
:10498000931F880F991F880F991F6FE070E00E9496 |
:1049900093456E177F0764F43197F093CA04E09350 |
:1049A000C90406C04F5F5F4F509383044093820455 |
:1049B0008091C9049091CA0480179107F4F1C8014D |
:1049C0003CC033E0493E5307BCF02091CB0430910A |
:1049D000CC04C90143E0880F991F4A95E1F7820F83 |
:1049E000931F800F911F6AE070E00E9493457093BF |
:1049F000CC046093CB0419C0CA0101969093830440 |
:104A0000809382046AE070E00E949345892B89F4C8 |
:104A10008091C9049091CA048017910734F40196DB |
:104A20009093CA048093C90404C01093CA040093ED |
:104A3000C9048091C9049091CA049C838B8397FF19 |
:104A400002C01C821B8280915C04843608F05DC029 |
:104A500080910301882399F48091040390910503C8 |
:104A60008F5F9F4F61F488E99AE39093C503809329 |
:104A7000C40380E09CE0909305038093040380913D |
:104A8000A3049091A404009731F001979093A4049B |
:104A90008093A30404C01092630410925004809188 |
:104AA00000018A3011F4289A01C0289880919E0450 |
:104AB00090919F04815D974028F180917307682F42 |
:104AC00077277C836B8381E080935004E0915A07C1 |
:104AD000FF27EE0FFF1FE25DF84F11821082E09179 |
:104AE0005B07FF27EE0FFF1FE25DF84F1182108278 |
:104AF000E0915D07FF27EE0FFF1FE25DF84F118287 |
:104B0000108268C21092630465C280915C048D3883 |
:104B100008F460C2109250048091740722E3829FCF |
:104B2000C00111249093A4048093A3048B819C81E1 |
:104B300089976CF080919E0490919F04AFEF8F3F16 |
:104B40009A0781F1019690939F0480939E0480912F |
:104B50009E0490919F04883C910520F0EB81FC819C |
:104B6000B89704F51092BD041092BE041092BF04D1 |
:104B70001092C0041092B9041092BA041092BB04AF |
:104B80001092BC0410923E0410923F041092400414 |
:104B90001092410410924204109243041092440473 |
:104BA000109245042B813C81293C31050CF472C1E3 |
:104BB00080916304882309F00DC280915D07E82F7E |
:104BC000FF27EE0FFF1FE25DF84F808191818C344B |
:104BD00091050CF4D5C08091A2048F5F8093A2044C |
:104BE000893C08F4F7C129980E941D2110926304A2 |
:104BF0001092A20410929F0410929E0480915A0772 |
:104C0000282F3327F901EE0FFF1FE25DF84F808157 |
:104C10009181873491059CF4E0915B07FF27EE0FAB |
:104C2000FF1FE25DF84F0190F081E02DF7FF03C018 |
:104C3000F095E195FF4FE734F1050CF46CC08091DD |
:104C40005B07682F7727DB01AA0FBB1FA25DB84F58 |
:104C50008D919C911197873491053CF0F901EE0FED |
:104C6000FF1FE25DF84F808191818D919C91873487 |
:104C7000910564F0F901EE0FFF1FE25DF84F8081AE |
:104C800091818734910514F042E001C041E0FB01BD |
:104C9000EE0FFF1FE25DF84F808191818634910510 |
:104CA0005CF4F901EE0FFF1FE25DF84F8081918106 |
:104CB000873491050CF043E0FB01EE0FFF1FE25D2E |
:104CC000F84F808191818A5B9F4F5CF4F901EE0F70 |
:104CD000FF1FE25DF84F80819181873491050CF0D0 |
:104CE00044E0660F771F625D784FDB018D919C91E8 |
:104CF0008A5B9F4F5CF4220F331F225D384FF9010E |
:104D000080819181863491050CF445E0A2E0B0E009 |
:104D1000042E0E94EB450E948B0247E46AE577E08F |
:104D20000E94B2020E948B020E94C1208091620701 |
:104D300080FF10C080910E0390910F03875B93401A |
:104D400038F480910E0390910F038E5E924010F420 |
:104D50000E9424100E94BC3A80913608882309F4EE |
:104D600039C188EE93E00E94700D80ED97E090933A |
:104D7000C5038093C40384EF91E00E94700D2AC1A3 |
:104D800080819181855B9F4F0CF081C08091A2044E |
:104D90008F5F8093A204893C08F41CC129988FEF8F |
:104DA00004E010E0D801082E0E94EB451092630445 |
:104DB0001092A20410929F0410929E040E941D2142 |
:104DC000809104049091050460E071E00E94934595 |
:104DD000D801062E0E94EB458091040490910504B1 |
:104DE00060E071E00E9493450F5F1F4FD801082ECD |
:104DF0000E94EB45809106049091070460E071E009 |
:104E00000E9493450F5F1F4FD801062E0E94EB456D |
:104E1000809106049091070460E071E00E94934540 |
:104E20000F5F1F4FD801082E0E94EB4560910804C8 |
:104E30007091090480910A0490910B040E947544BA |
:104E4000DC01CB0160E071E00E9493450F5F1F4FD2 |
:104E5000D801062E0E94EB45609108047091090468 |
:104E600080910A0490910B040E947544DC01CB01EF |
:104E700060E071E00E9493450F5F1F4FD801082E3C |
:104E80000E94EB450E948B020E94C120A3C0109299 |
:104E9000A204A0C0EB81FC81B3970CF09BC0809171 |
:104EA0005D07482F5527FA01EE0FFF1FE25DF84F0F |
:104EB00080819181855B9F4F0CF06DC08091A10432 |
:104EC0008F5F8093A104893C08F467C088EC8093CD |
:104ED000A10481E090E090939F0480939E0481E080 |
:104EE000809363041092B5041092B6041092B70434 |
:104EF0001092B80410923E0410923F0410924004A5 |
:104F000010924104109242041092430410924404FF |
:104F10001092450410922E0410922F041092300427 |
:104F20001092310410923604109237041092380413 |
:104F30001092390480910E0490910F04A0911004F6 |
:104F4000B09111048093320490933304A0933404FD |
:104F5000B09335048091160490911704A091180421 |
:104F6000B091190480933A0490933B04A0933C04BD |
:104F7000B0933D041092BD041092BE041092BF0481 |
:104F80001092C0041092B9041092BA041092BB049B |
:104F90001092BC0402C01092A104440F551F425D40 |
:104FA000584FDA018D919C918C3491058CF0809151 |
:104FB000A0048F5F8093A004893C60F0109263048A |
:104FC00088EC8093A00410929F0410929E0402C06B |
:104FD0001092A00480916B03815080936B038091A9 |
:104FE0006B038F3F29F080915004882309F442C35A |
:104FF0000E94A11D80915A07A82EBB24D501AA0F9B |
:10500000BB1FFD01E25DF84F0190F081E02DFC8BAC |
:10501000EB8B80916907E82EFF24AC5BB84F0D90B5 |
:10502000BC91A02DBA8BA98B80916A07482E55247C |
:1050300080915B07C82EDD24C601880F991FDC0113 |
:10504000A25DB84F0D90BC91A02DB88BAF878C5B43 |
:10505000984FFC0120803180E0915D07AE2FBB2787 |
:10506000AA0FBB1FA25DB84F0D90BC91A02DBE87AB |
:10507000AD8710919803612F772767FD7095872F73 |
:10508000972F0E94924417FF06C020E030E040E8CE |
:1050900053E40E94ED4320E030E040E251E40E94FE |
:1050A000ED4320E030E040E85BE30E940C453B012B |
:1050B0004C016093D1077093D2078093D3079093EC |
:1050C000D40710919903612F772767FD7095872F7B |
:1050D000972F0E94924417FF06C020E030E040E87E |
:1050E00053E40E94ED4320E030EE4BE257E40E948F |
:1050F0002F446093C1077093C2078093C3079093B6 |
:10510000C4072091B303222311F40C94AB388AE036 |
:1051100090E09093C5038093C403E22FFF27E2FF42 |
:1051200009C080917204482F5527440F551F440F22 |
:10513000551F10C0E3FD03C040E050E00BC080915C |
:1051400072049927880F991F880F991F44275527A4 |
:10515000481B590B20917C0430917D04C901F3E078 |
:10516000880F991FFA95E1F7821B930B840F951F07 |
:1051700068E070E00E9493458B0170937D0460931A |
:105180007C04E4FF09C080917204482F5527440F26 |
:10519000551F440F551F0FC0E5FD02C00C94C038C9 |
:1051A000809172049927880F991F880F991F4427AF |
:1051B0005527481B590B20917E0430917F04C9016B |
:1051C00063E0880F991F6A95E1F7821B930B840FA8 |
:1051D000951F68E070E00E9493457E8B6D8B709305 |
:1051E0007F0460937E048091B203282F332723FF2E |
:1051F00003C082E390E004C022FF07C08EEC9FEF63 |
:10520000909381048093800404C0109281041092D2 |
:10521000800421FF09C080919F039091A003019613 |
:105220009093A00380939F0324FF09C080919F0364 |
:105230009091A00301979093A00380939F034B89C3 |
:105240005C894E9D90014F9D300D5E9D300D112467 |
:1052500069897A89649DC001659D900D749D900D4A |
:105260001124280F391FC80168E070E00E9493459F |
:10527000260F371F3C8B2B8B30935E0420935D04ED |
:105280008F8598898E9D80018F9D100D9E9D100D9C |
:105290001124249CC001259C900D349C900D112458 |
:1052A000080F191F8D899E8968E070E00E94934560 |
:1052B000060F171F1093600400935F048091800411 |
:1052C00090918104AD85BE858A1B9B0B90936204EF |
:1052D000809361048091620782FF0CC080E090E0BF |
:1052E000A0E0B0E08093C1079093C207A093C307EA |
:1052F000B093C40720E030E040E050E0C401B301C7 |
:105300000E949C44882364F480E090E0A0E0B0E038 |
:105310008093D1079093D207A093D307B093D4077B |
:1053200020E030E040E050E06091C1077091C2079A |
:105330008091C3079091C4070E949C44882364F421 |
:1053400080E090E0A0E0B0E08093C1079093C207B6 |
:10535000A093C307B093C40780918E07682F772767 |
:1053600034E0832E912C8622972262FDC5C063FD16 |
:10537000C3C080910E0490910F04A0911004B091CD |
:10538000110481569A4EA040B0404CF1C70123E071 |
:10539000880F991F2A95E1F7EB89FC89E81BF90B27 |
:1053A000F0935E04E0935D0480910E0490910F04ED |
:1053B000A0911004B091110481589843A140B040CD |
:1053C0000CF441C0C701B4E0880F991FBA95E1F70A |
:1053D000E81BF90BF0935E04E0935D0434C0809108 |
:1053E0000E0490910F04A0911004B0911104805A02 |
:1053F0009541AF4FBF4F3CF59701A3E0220F331FFC |
:10540000AA95E1F74B895C89240F351F30935E0420 |
:1054100020935D0480910E0490910F04A0911004DC |
:10542000B091110481589843A140B04064F0C70185 |
:10543000F4E0880F991FFA95E1F7281B390B309398 |
:105440005E0420935D048091160490911704A0914E |
:105450001804B091190481569A4EA040B040DCF077 |
:10546000C701E3E0880F991FEA95E1F79801281B2F |
:10547000390B3093600420935F048091160490915F |
:105480001704A0911804B091190481589843A140C1 |
:10549000B04094F126C08091160490911704A09119 |
:1054A0001804B0911904805A9541AF4FBF4F24F5AD |
:1054B000970173E0220F331F7A95E1F7200F311F18 |
:1054C0003093600420935F04809116049091170438 |
:1054D000A0911804B091190481589843A140B0409C |
:1054E0005CF054E0EE0CFF1C5A95E1F72E193F09D1 |
:1054F0003093600420935F04F601EE0FFF1FE25D1E |
:10550000F84F2081318180918107482F552742171C |
:10551000530734F4892821F081E080936E0411C090 |
:10552000F601EE0FFF1FE25DF84F2081318180917F |
:105530008207DA01A81BB1092A173B0714F410925D |
:105540006E04F601EE0FFF1FE25DF84F808191813E |
:10555000AA27BB27A41BB50B8A179B0734F463FF4C |
:1055600004C081E080936F0417C080916F0488238A |
:1055700099F0CC0CDD1CEEE2F7E0CE0EDF1EF6015A |
:1055800020813181809182079927841B950B821796 |
:10559000930714F410926F04F501EE0FFF1FE25D04 |
:1055A000F84F808191814817590734F460FF04C097 |
:1055B00081E08093710415C080917104882389F083 |
:1055C000F501EE0FFF1FE25DF84F208131818091E0 |
:1055D0008207FA01E81BF1092E173F0714F4109215 |
:1055E0007104F501EE0FFF1FE25DF84F808191819C |
:1055F0008A179B0734F461FF04C081E08093700434 |
:1056000017C080917004882399F0AA0CBB1C2EE26D |
:1056100037E0A20EB31ED5012D913C9180918207F7 |
:105620009927841B950B8217930714F4109270042A |
:1056300080916E04882321F480916F04882321F0E7 |
:1056400081E080936D0402C010926D04809171041A |
:10565000882321F480917004882351F081E08093A5 |
:105660006C0410926D0410926E0410926F040EC0C0 |
:1056700010926C0480916D04882311F40C94C4384A |
:1056800084E690E09093C5038093C40380918007E3 |
:105690009927EB81FC818E179F0714F49C838B83E1 |
:1056A00080915004882341F11092620410926104A9 |
:1056B00010925E0410925D041092600410925F04D8 |
:1056C0008DEC9CECACECBDE38093D1079093D207BA |
:1056D000A093D307B093D4078AE097EDA3EABBE386 |
:1056E0008093C1079093C207A093C307B093C407E8 |
:1056F00010926D0410926C048091B7079091B807D6 |
:10570000A091B907B091BA0720910E0430910F040F |
:105710004091100450911104820F931FA41FB51FD4 |
:105720008093B7079093B807A093B907B093BA07CF |
:105730008091BB079091BC07A091BD07B091BE07B7 |
:1057400020911604309117044091180450911904C7 |
:10575000820F931FA41FB51F8093BB079093BC07B4 |
:10576000A093BD07B093BE078091AF079091B0079B |
:10577000A091B107B091B2072091120430911304A7 |
:105780004091140450911504820F931FA41FB51F5C |
:105790008093AF079093B007A093B107B093B2077F |
:1057A0008091A5079091A607A091A707B091A8079F |
:1057B00020911A0430911B0440911C0450911D0447 |
:1057C000820F931FA41FB51F8093A5079093A60770 |
:1057D000A093A707B093A80750906C04552011F030 |
:1057E0000C94243980916D04882311F00C94243991 |
:1057F0000C94CC38F0EE6F16FFEF7F06FFEF8F06AC |
:10580000FFEF9F0644F470EE672E7FEF772E7FEF59 |
:10581000872E7FEF972E213231054105510534F057 |
:1058200060E2E62EF12C012D112D0DC0205E3F4FC0 |
:105830004F4F5F4F44F450EEE52E5FEFF52E5FEFD4 |
:10584000052F5FEF152F80912E0490912F04A091CA |
:105850003004B091310486199709A809B9098093D9 |
:105860002E0490932F04A0933004B09331048091C0 |
:10587000360490913704A0913804B09139048E1900 |
:105880009F09A00BB10B8093360490933704A0932B |
:105890003804B09339048091E4039091E5038F3F7D |
:1058A000910509F008F47DC4552009F0FEC38091EC |
:1058B0006D04882309F0F9C36091B7077091B807A8 |
:1058C0008091B9079091BA0720E031E040E050E0C4 |
:1058D0000E94C8452093B7073093B8074093B90793 |
:1058E0005093BA076091BB077091BC078091BD07C8 |
:1058F0009091BE0720E031E040E050E00E94C845B2 |
:105900002093BB073093BC074093BD075093BE075D |
:10591000E0906E07FF240027112720911E0430918C |
:105920001F044091200450912104C801B7010E9436 |
:10593000544520E031E040E050E00E94C84520930B |
:105940001E0430931F04409320045093210420919F |
:105950002204309123044091240450912504C8016D |
:10596000B7010E94544520E031E040E050E00E9441 |
:10597000C845209322043093230440932404509379 |
:105980002504609126047091270480912804909149 |
:10599000290420E031E040E050E00E94C845209317 |
:1059A00026043093270440932804509329046091DF |
:1059B000B7077091B8078091B9079091BA07209105 |
:1059C0001E0430911F044091200450912104E09066 |
:1059D0008707FF2400271127621B730B840B950B8D |
:1059E000A80197010E94C84520939604309397041C |
:1059F0004093980450939904CA01B90120E031E022 |
:105A000040E050E00E94C845390130936B04209378 |
:105A10006A046091BB077091BC078091BD079091AB |
:105A2000BE07209122043091230440912404509118 |
:105A30002504621B730B840B950BA80197010E9430 |
:105A4000C845CA01B90120E031E040E050E00E94C1 |
:105A5000C845490130936904209368046091AF07F9 |
:105A60007091B0078091B1079091B20720E031E0CA |
:105A700040E050E00E94C8452093AF073093B00744 |
:105A80004093B1075093B2076091A5077091A607A4 |
:105A90008091A7079091A80720E031E040E050E016 |
:105AA0000E94C8452093A5073093A6074093A707F7 |
:105AB0005093A807E0901204F0901304009114048E |
:105AC0001091150480910E0490910F04A091100480 |
:105AD000B0911104E81AF90A0A0B1B0BE092B10409 |
:105AE000F092B2040093B3041093B404A0901A048B |
:105AF000B0901B04C0901C04D0901D04809116042B |
:105B000090911704A0911804B0911904A81AB90A29 |
:105B1000CA0ADB0AA092AD04B092AE04C092AF04F0 |
:105B2000D092B004E092A904F092AA040093AB04CE |
:105B30001093AC04A092A504B092A604C092A7044E |
:105B4000D092A8048091320490913304A09134043F |
:105B5000B09135048E199F09A00BB10B80933204CC |
:105B600090933304A0933404B093350480913A04A5 |
:105B700090913B04A0913C04B0913D048A199B098B |
:105B8000AC09BD0980933A0490933B04A0933C0474 |
:105B9000B0933D048091DD079091DE07A091DF076F |
:105BA000B091E007805D9D4DA640B040A4F080918B |
:105BB000DD079091DE07A091DF07B091E007805DDF |
:105BC0009D4DA640B0408093DD079093DE07A093E3 |
:105BD000DF07B093E0078091DD079091DE07A09189 |
:105BE000DF07B091E007B7FF14C08091DD07909107 |
:105BF000DE07A091DF07B091E00780539242A94FE2 |
:105C0000BF4F8093DD079093DE07A093DF07B0932B |
:105C1000E007809100018A3011F4289801C0289A89 |
:105C200081E090E090939104809390048091B70775 |
:105C30009091B807A091B907B091BA072091880454 |
:105C40003091890440918A0450918B04281B390BB0 |
:105C50004A0B5B0B57FF07C0509540953095219537 |
:105C60003F4F4F4F5F4F20523E44404050400CF05A |
:105C7000B9C091E0E91690E1F90690E0090790E0DB |
:105C800019070CF44EC080918F04882309F445C095 |
:105C9000D801C7014CE0B595A795979587954A958A |
:105CA000D1F701969093910480939004D801C70195 |
:105CB00033E0B595A795979587953A95D1F7809359 |
:105CC000960490939704A0939804B09399048958EC |
:105CD0009341A040B04064F088E893E1A0E0B0E0D8 |
:105CE0008093960490939704A0939804B09399049A |
:105CF0006091960470919704809198049091990412 |
:105D000020E031E040E050E00E94C845620E731E82 |
:105D100070926B0460926A0462C081E080938F0489 |
:105D20005EC010928F04F0E0EF16F0EFFF06FFEF79 |
:105D30000F07FFEF1F070CF052C080918E048823DD |
:105D400009F449C088279927DC018E199F09A00B07 |
:105D5000B10B2CE0B595A795979587952A95D1F726 |
:105D600001969093910480939004C801B70128E0B4 |
:105D700030E040E050E00E94C84520939604309304 |
:105D80009704409398045093990428573C4E4F4FE2 |
:105D90005F4F64F488E79CEEAFEFBFEF809396040B |
:105DA00090939704A0939804B093990460919604FB |
:105DB00070919704809198049091990420E031E0CB |
:105DC00040E050E00E94C845620E731E70926B0462 |
:105DD00060926A040BC081E080938E0407C0109229 |
:105DE0008E0404C010929104109290048091880750 |
:105DF000682E77248091900490919104681679061A |
:105E000024F4709291046092900471E0E71674E0BB |
:105E1000F70670E0070770E017075CF08091FA035F |
:105E20009091FB032091900430919104820F931F75 |
:105E300013C080E0E8168CEFF8068FEF08078FEFAD |
:105E4000180774F48091FA039091FB032091900459 |
:105E500030919104821B930B9093FB038093FA0380 |
:105E600081E090E0909391048093900410929204CA |
:105E70001092930410929404109295048091BB07A1 |
:105E80009091BC07A091BD07B091BE0720918404FA |
:105E9000309185044091860450918704281B390B6A |
:105EA0004A0B5B0B57FF07C05095409530952195E5 |
:105EB0003F4F4F4F5F4F20523E44404050400CF008 |
:105EC000B9C0A1E0AA16A0E1BA06A0E0CA06A0E007 |
:105ED000DA060CF44EC080918D04882309F445C085 |
:105EE000D601C501FCE0B595A79597958795FA95DC |
:105EF000D1F701969093910480939004D601C50147 |
:105F0000E3E0B595A79597958795EA95D1F78093A6 |
:105F1000920490939304A0939404B09395048958A9 |
:105F20009341A040B04064F088E893E1A0E0B0E085 |
:105F30008093920490939304A0939404B093950457 |
:105F400060919204709193048091940490919504CF |
:105F500020E031E040E050E00E94C845820E931EF0 |
:105F6000909269048092680462C081E080938D04FD |
:105F70005EC010928D04F0E0AF16F0EFBF06FFEFA9 |
:105F8000CF06FFEFDF060CF052C080918C0488230F |
:105F900009F449C088279927DC018A199B09AC09B3 |
:105FA000BD097CE0B595A795979587957A95D1F72A |
:105FB00001969093910480939004C601B50128E066 |
:105FC00030E040E050E00E94C845209392043093B6 |
:105FD0009304409394045093950428573C4E4F4F9C |
:105FE0005F4F64F488E79CEEAFEFBFEF80939204BD |
:105FF00090939304A0939404B093950460919204B9 |
:1060000070919304809194049091950420E031E084 |
:1060100040E050E00E94C845820E931E90926904B1 |
:10602000809268040BC081E080938C0407C01092BA |
:106030008C0404C0109291041092900480919004FA |
:10604000909191046816790624F4709291046092FC |
:10605000900471E0A71674E0B70670E0C70670E020 |
:10606000D7065CF08091FC039091FD032091900491 |
:1060700030919104820F931F13C080E0A8168CEF1B |
:10608000B8068FEFC8068FEFD806BCF48091FC03EA |
:106090009091FD032091900430919104821B930B09 |
:1060A0009093FD038093FC0308C010926904109242 |
:1060B000680410926B0410926A0420E030E040E023 |
:1060C00050E06091C1077091C2078091C307909121 |
:1060D000C4070E949C44882341F4109269041092E2 |
:1060E000680410926B0410926A048091B707909133 |
:1060F000B807A091B907B091BA078093880490932C |
:106100008904A0938A04B0938B048091BB0790917B |
:10611000BC07A091BD07B091BE0780938404909303 |
:106120008504A0938604B093870410921E041092F5 |
:106130001F04109220041092210410922204109245 |
:106140002304109224041092250410922604109225 |
:10615000270410922804109229041092B707109275 |
:10616000B8071092B9071092BA071092BB071092A5 |
:10617000BC071092BD071092BE071092AF07109295 |
:10618000B0071092B1071092B2071092A5071092B3 |
:10619000A6071092A7071092A8071092E503109285 |
:1061A000E4038090610490906204940197FE04C01F |
:1061B0002227332728193909253131053CF08091F0 |
:1061C000620784FD03C081E080939A04E0906B072E |
:1061D0005901CC24B7FCC094DC2CB401882777FD8E |
:1061E0008095982F2E2D3327442755270E945445FC |
:1061F0009B01AC01C601B5010E94544520E032E08C |
:1062000040E050E00E94C84589019A01FF24E89CC3 |
:10621000C001E99C900DF89C900D112464E070E0A1 |
:106220000E949345600F711F882777FD8095982FF6 |
:106230006093B5047093B6048093B7049093B80448 |
:1062400020913E0430913F0440914004509141041C |
:10625000261B370B480B590B20933E0430933F0409 |
:10626000409340045093410480913E0490913F0438 |
:10627000A0914004B09141048155934CA040B0409E |
:1062800064F080E593ECA0E0B0E080933E0490934E |
:106290003F04A0934004B093410480913E04909148 |
:1062A0003F04A0914004B0914104805B9C43AF4FF8 |
:1062B000BF4F64F480EB9CE3AFEFBFEF80933E04ED |
:1062C00090933F04A0934004B09341048091C8038D |
:1062D000882309F4CFC01092C8032091CC073091D5 |
:1062E000CD0737FF03C0309521953F4F3093AE0760 |
:1062F0002093AD078091D6079091D70797FF03C0F1 |
:10630000909581959F4F9093C8078093C707243637 |
:1063100031050CF0ADC0843691050CF0A9C0209178 |
:106320004A0430914B048091C9039091CA03281B01 |
:10633000390B37FF03C0309521953F4F263031058B |
:106340000CF098C081E0809352046091DD07709159 |
:10635000DE078091DF079091E00722EE34E040E015 |
:1063600050E00E94C8452093DD073093DE0740933C |
:10637000DF075093E00720914A0430914B0480914D |
:10638000DD079091DE07A091DF07B091E007281BA1 |
:10639000390B3093AE072093AD07C9010197833BBA |
:1063A0009105C0F0243B310534F4C9018C549F4F52 |
:1063B000843B910560F48091DD079091DE07A09108 |
:1063C000DF07B091E0070197A109B1090EC02C5475 |
:1063D0003F4F9CF48091DD079091DE07A091DF078D |
:1063E000B091E0070196A11DB11D8093DD07909348 |
:1063F000DE07A093DF07B093E0078091DD0790915F |
:10640000DE07A091DF07B091E007B7FF14C08091CD |
:10641000DD079091DE07A091DF07B091E007885972 |
:106420009E4FAF4FBF4F8093DD079093DE07A09341 |
:10643000DF07B093E0076091DD077091DE07809180 |
:10644000DF079091E00728E631E040E050E00E944D |
:10645000C84522EE34E040E050E00E94544560938D |
:10646000DD077093DE078093DF079093E00702C09B |
:10647000109252048091620785FF2AC080915F04C8 |
:10648000909160044896C19718F580915D049091B1 |
:106490005E044896C197E0F48091540890915508A5 |
:1064A000892BB1F08091940390915304893C20F0A2 |
:1064B000933021F084E006C0943019F41092530414 |
:1064C00003C083E08093530480915304992708C04C |
:1064D00080915304882331F01092530480E090E0BF |
:1064E0000E94113C80914A0490914B04892B09F43D |
:1064F00061C08091620783FF5DC08091CB03909162 |
:10650000CC03892B09F456C02091C7073091C807E6 |
:106510008091AD079091AE078217930724F43093D2 |
:10652000AE072093AD0720915204222371F0809191 |
:106530009A04882351F080914A0490914B049093DF |
:106540004D0480934C0410929A0480919703482F35 |
:1065500055275093AE074093AD071416150654F512 |
:10656000222341F100913E0410913F042091400408 |
:106570003091410480914E0490914F04BC01649F7E |
:10658000C001659F900D749F900D112460E270E032 |
:106590000E949345882777FD8095982F060F171F37 |
:1065A000281F391F00933E0410933F04209340049A |
:1065B0003093410480919B04815080939B048F3FD2 |
:1065C00009F0DCC088E180939B0460910E04709117 |
:1065D0000F048091100490911104E0906E07FF2445 |
:1065E00000271127A80197010E94C8453093D406BF |
:1065F0002093D306609116047091170480911804BB |
:1066000090911904A80197010E94C8453093D606BD |
:106610002093D5068091CC079091CD079093D80612 |
:106620008093D7068091D6079091D7079093DA068A |
:106630008093D9068091CF079091D0079093DC0684 |
:106640008093DB0680916404909165049093DE064C |
:106650008093DD0660914604709147048091480460 |
:106660009091490420E032E040E050E00E94C845AB |
:106670003093E0062093DF0680914A0490914B040A |
:106680009093E4068093E3066091DD077091DE0746 |
:106690008091DF079091E00722EE34E040E050E087 |
:1066A0000E94C8453093E6062093E5068091B50325 |
:1066B0009091B6039093F4068093F30680910803BB |
:1066C000909109039093F6068093F5068091AA07AE |
:1066D0009091AB079093F8068093F7068091A207FC |
:1066E0009091A3079093FA068093F9068091CF07C3 |
:1066F0009091D0079093FC068093FB0680915D04F7 |
:1067000090915E049093FE068093FD0680915F0455 |
:1067100090916004909300078093FF06809161043C |
:10672000909162049093020780930107809163081F |
:1067300090916408909308078093070780916508FB |
:106740009091660890930A078093090780916708E3 |
:106750009091680890930C0780930B072091530445 |
:1067600084E1289F90011124809170089091710814 |
:10677000820F931F90930E0780930D0780916C04F6 |
:106780008823A9F06091AA077091AB07882777FD4D |
:106790008095982F0E9492442091D1073091D20782 |
:1067A0004091D3075091D4070E940C4532C06091AC |
:1067B0000E0470910F048091100490911104E090E8 |
:1067C000AA07F090AB070E9492442091C107309134 |
:1067D000C2074091C3075091C4070E940C455B015A |
:1067E0006C010027F7FC0095102FC801B7010E942B |
:1067F00092442091D1073091D2074091D307509114 |
:10680000D4070E940C459B01AC01C601B5010E9452 |
:10681000ED430E9475447093AB076093AA07809183 |
:106820006D048823A9F06091A2077091A3078827BF |
:1068300077FD8095982F0E9492442091D107309146 |
:10684000D2074091D3075091D4070E940C4532C023 |
:1068500060911604709117048091180490911904A6 |
:10686000E090A207F090A3070E9492442091C107F4 |
:106870003091C2074091C3075091C4070E940C4554 |
:106880005B016C010027F7FC0095102FC801B701D0 |
:106890000E9492442091D1073091D2074091D307B2 |
:1068A0005091D4070E940C459B01AC01C601B50173 |
:1068B0000E94ED430E9475447093A3076093A20762 |
:1068C0006091CF077091D007E0902A04F0902B04DC |
:1068D00000912C0410912D042090C1073090C20724 |
:1068E0004090C3075090C407882777FD8095982F64 |
:1068F0000E9492442091D1073091D2074091D30752 |
:106900005091D4070E940C455B016C01C801B7018E |
:106910000E949244A20191010E940C4520E030E0C7 |
:1069200040E05FE30E940C459B01AC01C601B5014C |
:106930000E94ED430E9475447093D0076093CF0787 |
:1069400060911604709117048091180490911904B5 |
:106950000E949244A20191010E940C450E9475443C |
:10696000709306076093050780905F049090600421 |
:1069700090921207809211078091AA079091AB071D |
:106980008150984034F080E098E09093AB0780937A |
:10699000AA078091AA079091AB078050984F34F4D2 |
:1069A00080E098EF9093AB078093AA078091A207AD |
:1069B0009091A3078150984034F080E098E0909344 |
:1069C000A3078093A2078091A2079091A30780500C |
:1069D000984F34F480E098EF9093A3078093A20738 |
:1069E0008091CF079091D0078150984034F080E09B |
:1069F00098E09093D0078093CF078091CF07909134 |
:106A0000D0078050984F34F480E098EF9093D007EF |
:106A10008093CF0780916207992780FFD9C040916A |
:106A2000940381FF0EC0423310F58091640490916D |
:106A30006504449790936704809366041092510410 |
:106A400019C020919F033091A003240F311D809124 |
:106A500067079927AC01249FC001259F900D349FA3 |
:106A6000900D11244497909367048093660481E00D |
:106A70008093510480915004882321F01092670480 |
:106A8000109266042091640430916504409166047C |
:106A900050916704421753070CF09AC0809151043B |
:106AA000882309F495C0241B350B80919503992701 |
:106AB000BC01269FC001279F900D369F900D112489 |
:106AC00060E170E00E9493450B811C81061B170B4F |
:106AD0002091E2033091E303809193039927DC0135 |
:106AE0002A9FC0012B9F900D3A9F900D112468E0C2 |
:106AF00070E00E949345061B170B6091460470914D |
:106B00004704809148049091490420E032E040E03D |
:106B100050E00E94C845CA01B9012091960333276D |
:106B2000442755270E94544520E230E040E050E0E1 |
:106B30000E94C845BFEF2E3C3B0714F42EEC3FEFFC |
:106B400080919C0490919D04AC0164E0440F551F1A |
:106B50006A95E1F7481B590B2333310514F022E302 |
:106B600030E0021B130BCA01800F911F60E170E03F |
:106B70000E94934570939D0460939C0480916307E9 |
:106B80009927681779078CF4EB81FC81E817F907DE |
:106B90002CF090939D0480939C0407C02B813C8132 |
:106BA00030939D0420939C040DC080919C0490918F |
:106BB0009D044B815C814817590724F450939D0430 |
:106BC00040939C0460919C0470919D047C836B8332 |
:106BD0008B819C819093E2068093E106E090CF0741 |
:106BE000F090D0070091B5041091B6042091B7043D |
:106BF0003091B8048091CE07682E7724AB81BC8198 |
:106C000054971CF41E821D8229C08B819C8162E0F6 |
:106C100070E00E9493459701201B310BCB01261792 |
:106C200037070CF4C901709561957F4F6817790794 |
:106C30000CF4BC01C301EB81FC818E1B9F0B681718 |
:106C400079070CF4CB012B813C81261937093E834F |
:106C50002D832817390714F49E838D832091AA076A |
:106C60003091AB0740915D0450915E048091CD045A |
:106C70009091CE04481B590B5C8B4B8B241B350B1E |
:106C80003093B6072093B50720E030E040E050E0B5 |
:106C9000C201B1010E949C448823F1F1E0900E04EE |
:106CA000F0900F0400911004109111046091BD0444 |
:106CB0007091BE048091BF049091C0040E949244E0 |
:106CC0005B016C01C801B7010E949244A2019101CD |
:106CD0000E940C457B018C01AB89BC89BD018827D2 |
:106CE00077FD8095982F0E9492449B01AC01C801CA |
:106CF000B7010E94EC439B01AC01C601B5010E94A3 |
:106D0000ED430E9475446093BD047093BE0480936C |
:106D1000BF049093C0041CC02091B5073091B60702 |
:106D2000442737FD4095542F8091BD049091BE04B7 |
:106D3000A091BF04B091C004820F931FA41FB51F80 |
:106D40008093BD049093BE04A093BF04B093C0048D |
:106D50008091BD049091BE04A091BF04B091C00485 |
:106D6000181619061A061B0624F40297A109B10980 |
:106D700003C00296A11DB11D8093BD049093BE0473 |
:106D8000A093BF04B093C0048091BD049091BE0451 |
:106D9000A091BF04B091C0048138EEE39E07E0E00B |
:106DA000AE07E0E0BE072CF080E89EE3A0E0B0E094 |
:106DB00009C08058914CAF4FBF4F64F480E891EC0C |
:106DC000AFEFBFEF8093BD049093BE04A093BF04C8 |
:106DD000B093C0046091B5077091B60720918F03FE |
:106DE00030919003409191035091920329873A8703 |
:106DF0004B875C87882777FD8095982F0E94924467 |
:106E00007B018C016091BD047091BE048091BF0430 |
:106E10009091C0040E9492449B01AC0169857A85DF |
:106E20008B859C850E940C459B01AC01C801B70174 |
:106E30000E94ED430E9475445B016C017C8B6B8B5F |
:106E400080919E03E82EFF24002711278D819E81CB |
:106E500097FF03C0909581959F4F62E070E00E947C |
:106E600093459B014B815C81240F351F442737FDDF |
:106E70004095542FC801B7010E94544520E430E0EA |
:106E800040E050E00E94C8453A8329838B899C8961 |
:106E9000821793070CF49501A981BA81B095A19549 |
:106EA000BF4FB887AF83AD01A217B3070CF4A90198 |
:106EB0008B819C81ED81FE818E0F9F1F840F951F1A |
:106EC00097FF03C020E030E005C0930186159705C9 |
:106ED0000CF49C018091AC07682F77277C8B6B8B1F |
:106EE000CB01621773070CF4C9018093A4078B814F |
:106EF0009C81841B950BAD81BE818A0F9B1F97FFE0 |
:106F000003C020E030E005C09301861597050CF41E |
:106F10009C018B899C89821793070CF4C90180938B |
:106F2000A9078091A2079091A3072091CF043091E7 |
:106F3000D004821A930A881999099093A107809323 |
:106F4000A00720E030E040E050E0C201B1010E9423 |
:106F50009C448823E1F1E0901604F090170400911E |
:106F60001804109119046091B9047091BA048091C9 |
:106F7000BB049091BC040E9492445B016C01C80167 |
:106F8000B7010E949244A20191010E940C457B012D |
:106F90008C01B401882777FD8095982F0E94924438 |
:106FA0009B01AC01C801B7010E94EC439B01AC01FD |
:106FB000C601B5010E94ED430E9475446093B90477 |
:106FC0007093BA048093BB049093BC041CC02091BE |
:106FD000A0073091A107442737FD4095542F809199 |
:106FE000B9049091BA04A091BB04B091BC04820F83 |
:106FF000931FA41FB51F8093B9049093BA04A09364 |
:10700000BB04B093BC048091B9049091BA04A091E0 |
:10701000BB04B091BC04181619061A061B0624F40A |
:107020000297A109B10903C00296A11DB11D809369 |
:10703000B9049093BA04A093BB04B093BC048091AC |
:10704000B9049091BA04A091BB04B091BC048138FA |
:10705000EEE39E07E0E0AE07E0E0BE072CF080E83C |
:107060009EE3A0E0B0E009C08058914CAF4FBF4F05 |
:1070700064F480E891ECAFEFBFEF8093B904909394 |
:10708000BA04A093BB04B093BC046091A0077091B4 |
:10709000A107882777FD8095982F0E9492447B0155 |
:1070A0008C016091B9047091BA048091BB049091F5 |
:1070B000BC040E9492449B01AC0169857A858B8552 |
:1070C0009C850E940C459B01AC01C801B7010E9440 |
:1070D000ED430E94754429813A81621773070CF4CD |
:1070E0009B018F819885821793070CF4C9014B810E |
:1070F0005C81480F591F2D813E81421B530B57FF66 |
:1071000003C060E070E005C0B301461557050CF4FC |
:10711000BA014B895C89461757070CF4AB014093C1 |
:10712000C9072B813C81281B390B4D815E81241BB3 |
:10713000350B37FF03C040E050E005C0A301261522 |
:1071400037050CF4A9018B899C89841795070CF0ED |
:10715000D9C0CA01D7C020917C0430917D04C901F7 |
:1071600013E0880F991F1A95E1F7821B930B68E0D3 |
:1071700070E00E9493458B0170937D0460937C04C2 |
:1071800040E050E00C94DB2880916C04882311F4DB |
:107190000C94502B0C94462B60910E0470910F04AC |
:1071A0008091100490911104A0906E07BB24CC2410 |
:1071B000DD24E090CC07F090CD07A60195010E9458 |
:1071C000C8450027F7FC0095102F2E193F09400BEA |
:1071D000510BCA01B90120E130E040E050E00E94CB |
:1071E000C84539014A0160911604709117048091D5 |
:1071F000180490911904E090D607F090D707A601E3 |
:1072000095010E94C8450027F7FC0095102F2E1904 |
:107210003F09400B510BCA01B90120E130E040E0C9 |
:1072200050E00E94C84579018A0161E26616710446 |
:107230008104910414F40C94FA2BB0E26B2E712C9F |
:10724000812C912C0C940B2C10921E0410921F0474 |
:107250001092200410922104109222041092230410 |
:1072600010922404109225041092B7071092B807C8 |
:107270001092B9071092BA071092BB071092BC0780 |
:107280001092BD071092BE071092AF071092B00780 |
:107290001092B1071092B2071092A5071092A6079C |
:1072A0001092A7071092A80780912E0490912F04A6 |
:1072B000A0913004B0913104809332049093330450 |
:1072C000A0933404B0933504809136049091370430 |
:1072D000A0913804B091390480933A0490933B0410 |
:1072E000A0933C04B0933D041092E5031092E40394 |
:1072F00010926B0410926A04109269041092680450 |
:107300000C944B2C8093C50766960FB6F894DEBF9D |
:107310000FBECDBFDF91CF911F910F91FF90EF90E6 |
:10732000DF90CF90BF90AF909F908F907F906F90A5 |
:107330005F904F903F902F9008951092D20410923A |
:10734000D1041092380810923708109271081092E8 |
:10735000700810922308109205081092820810926B |
:10736000360810924B08109269081092CE041092C1 |
:10737000CD041092D0041092CF0410926F08109296 |
:107380006E08109253081092520810921008109232 |
:107390000F08109255081092540808958091230800 |
:1073A000882319F481E090E0089580918208882371 |
:1073B00009F48CC080910508882309F487C0809166 |
:1073C000760899278370907002970CF474C08091AE |
:1073D000770880FF70C06091150870911608809141 |
:1073E0001708909118082AE030E040E050E00E9431 |
:1073F000C8452093390830933A0840933B0850938E |
:107400003C086091190870911A0880911B089091AE |
:107410001C082AE030E040E050E00E94C84520937C |
:107420003D0830933E0840933F08509340086091D8 |
:107430001D0870911E0880911F08909120082AE075 |
:1074400030E040E050E00E94C8452093410830936E |
:10745000420840934308509344086091F5077091A7 |
:10746000F6078091F7079091F8072AE030E040E0B6 |
:1074700050E00E94A645209345083093460840936B |
:107480004708509348086091F9077091FA07809176 |
:10749000FB079091FC0720EA36E841E050E00E94AB |
:1074A000C84530934A082093490881E080934B08EF |
:1074B00080E090E004C010924B0882E090E01092CF |
:1074C00023081092820810920508089581E090E048 |
:1074D00008950E94CE39181619060CF44CC08091FC |
:1074E00054089091550821E08039920730F4845D6A |
:1074F0009E4F9093550880935408809136088823B6 |
:10750000B1F18091390890913A0820912408309186 |
:107510002508821B930B90936408809363088091E5 |
:107520003D0890913E082091280830912908821B3F |
:10753000930B909366088093650880914108909121 |
:10754000420820912C0830912D08821B930B9093B8 |
:1075500068088093670881E08093690881E090E083 |
:1075600090936F0880936E0880E090E008951092E9 |
:10757000690882E090E008950E94CE39892B99F540 |
:107580008091390890913A08A0913B08B0913C084D |
:107590008093240890932508A0932608B093270889 |
:1075A00080913D0890913E08A0913F08B09140081D |
:1075B0008093280890932908A0932A08B0932B0859 |
:1075C0008091410890914208A0914308B0914408ED |
:1075D00080932C0890932D08A0932E08B0932F0829 |
:1075E00081E0809336080895482F2091D10430918E |
:1075F000D2042530310509F49AC0263031058CF4C7 |
:107600002130310529F1223031051CF4232BD1F032 |
:1076100003C12230310571F12330310509F0FCC07E |
:107620002FC02730310509F4E2C0273031050CF4B2 |
:1076300090C02830310509F4E5C02930310509F042 |
:10764000EBC0A2C0853B09F0E7C081E090E0D5C067 |
:10765000823639F482E090E09093D2048093D10492 |
:1076600004C01092D2041092D1041092E704109238 |
:10767000E8040895813009F0CFC083E090E0BDC0F8 |
:10768000883031F0823151F1833009F044C013C0A9 |
:1076900023E238E03093F6042093F5048091230828 |
:1076A0008823C9F5225130403093F4042093F30429 |
:1076B0002E5E3F4F25C022E838E03093F604209339 |
:1076C000F50480918208882331F5205130403093B1 |
:1076D000F4042093F304205F3F4F12C025E038E00C |
:1076E0003093F6042093F50480910508882399F4DB |
:1076F000245230403093F4042093F3042C5D3F4F28 |
:107700003093EC042093EB0485E090E09093D20456 |
:107710008093D10404C01092D2041092D104842F1B |
:107720008F5F8093E7048F5F8093E8040895992723 |
:107730009093EA048093E9049091E704940F909366 |
:10774000E7048091E804890F8093E80486E090E0E4 |
:1077500054C0282F3327322F22278091E90490919B |
:10776000EA04820F931F9093EA048093E9049091B6 |
:10777000E704940F9093E7048091E804890F8093C5 |
:10778000E80489E090E039C06091E9047091EA046E |
:107790006115710509F440C0E091F304F091F4041F |
:1077A00080838091E704840F8093E7049091E8043C |
:1077B000980F9093E804CB0101979093EA0480938B |
:1077C000E904892B89F08091EB049091EC048E17E9 |
:1077D0009F0750F03196F093F404E093F304309354 |
:1077E000D2042093D104089587E090E006C08091F0 |
:1077F000E704481789F488E090E09093D2048093DE |
:10780000D10408958091E804481731F4E091F5041B |
:10781000F091F60481E080831092D2041092D1049A |
:1078200008952F923F924F925F926F927F928F9224 |
:107830009F92AF92BF92CF92DF92EF92FF920F93FF |
:107840001F93CF93DF933C018330910509F4C4C0AB |
:107850008430910521F0892B09F422C1BAC020910E |
:10786000370830913808C9010197029708F435C1EB |
:107870008091E5049091E60401969093E60480934C |
:10788000E504855F914008F4F5C51092E604109276 |
:10789000E5041092EE041092ED041092F0041092A0 |
:1078A000EF041092F2041092F1041092E40410928A |
:1078B000E3041092E2041092E10410926B0810921B |
:1078C0006A0810926D0810926C081092DE041092F3 |
:1078D000DD041092E0041092DF041092D80410929C |
:1078E000D7041092D6041092D5041092DC041092A2 |
:1078F000DB041092DA041092D90410924C08109212 |
:107900004D0810924E0810924F081092D404109215 |
:10791000D30410927108109270088091690888232E |
:1079200009F451C0809163089091640890935D08B8 |
:1079300080935C08609165087091660870935F0899 |
:1079400060935E0821E02093620890930908809379 |
:10795000080870930B0860930A0820930E0870952E |
:1079600061957F4F909581959F4F0E9452429C0157 |
:107970009093510880935008E0915C08F0915D0865 |
:10798000F7FF03C08AE590E002C08EE091E0821B21 |
:10799000930B909351088093500840915008509158 |
:1079A000510860915E0870915F08CF010E948C437E |
:1079B000709359086093580882E090E090933808DB |
:1079C000809337085AC510926208109238081092B6 |
:1079D000370882E090E053C58091370890913808CD |
:1079E000019709F4FAC18091E5049091E6040196AB |
:1079F0009093E6048093E504855F914008F43AC5CE |
:107A00001092E6041092E50480916908882309F435 |
:107A100044C01092F0041092EF041092F2041092FD |
:107A2000F1041092E4041092E3041092E204109224 |
:107A3000E10410926B0810926A0810926D0810927F |
:107A40006C081092DE041092DD041092E004109293 |
:107A5000DF041092D8041092D7041092D60410922A |
:107A6000D5041092DC041092DB041092DA04109218 |
:107A7000D9048091630890916408909309088093D9 |
:107A80000808809165089091660890930B08809390 |
:107A90000A0881E080930E089DC110920E0895CFD0 |
:107AA0001092E6041092E5041092CE041092CD04D8 |
:107AB0001092D0041092CF041092530810925208E2 |
:107AC0001092100810920F0810927108109270080E |
:107AD0001092380810923708D0C42130310509F4CB |
:107AE0007CC12230310541F0232B09F06ECF10927A |
:107AF000E6041092E504C1C480916208882309F469 |
:107B000064CF80916E0890916F08181619060CF0DA |
:107B100061C18091700890917108099709F45AC168 |
:107B20008091ED049091EE0401969093EE04809381 |
:107B3000ED046091080870910908809163089091A4 |
:107B400064086B01C81AD90AD7FE04C0D094C19446 |
:107B5000D108D394E0910A08F0910B088091650850 |
:107B600090916608DF01A81BB90BB7FF03C0B09561 |
:107B7000A195BF4F20914C0830914D0840914E087F |
:107B800050914F088091580890915908821B930B8F |
:107B9000833391050CF444C08CE3C816D1042CF552 |
:107BA000DC971CF58091D3049091D4048C3091051E |
:107BB0002CF401969093D4048093D3048091D30441 |
:107BC0009091D404AA2797FDA095BA2F280F391FAA |
:107BD0004A1F5B1F20934C0830934D0840934E087A |
:107BE00050934F0883E090E041C08091D30490917E |
:107BF000D404823091052CF001979093D4048093A3 |
:107C0000D3042F5F3F4F4F4F5F4F20934C0830936B |
:107C10004D0840934E0850934F0884E090E026C0F2 |
:107C20004F970CF484C098E2C916D1048CF498974D |
:107C30007CF42A5F3F4F4F4F5F4F20934C083093A7 |
:107C40004D0840934E0850934F0885E090E00EC0D9 |
:107C50002F5F3F4F4F4F5F4F20934C0830934D089D |
:107C600040934E0850934F0886E090E0909371083F |
:107C7000809370081092F2041092F10481E090E079 |
:107C80009093F0048093EF0460904C0870904D083E |
:107C900080904E0890904F08809150089091510824 |
:107CA0000E942E437C0120904C0830904D0840905B |
:107CB0004E0850904F0880915008909151080E94B2 |
:107CC00084435C010027F7FC0095102FC401B30129 |
:107CD000A80197010E94544528EE33E040E050E0AF |
:107CE0000E94C84580915C0890915D08820F931FA7 |
:107CF0009093090880930808CC24B7FCC094DC2C2E |
:107D0000C201B101A60195010E94544528EE33E05D |
:107D100040E050E00E94C84580915E0890915F0865 |
:107D2000820F931F90930B0880930A0853C028E298 |
:107D3000C216D1040CF048C098970CF045C087E0FB |
:107D400090E090937108809370081092F004109264 |
:107D5000EF041092F2041092F104633071051CF0EC |
:107D60006350704006C03FEF6E3F730734F46D5FA1 |
:107D70007F4F7093090860930808E330F10514F011 |
:107D8000339705C04FEFEE3FF4072CF43396F09392 |
:107D90000B08E0930A08809108089091090803965F |
:107DA0000797C0F480910A0890910B0803960797F3 |
:107DB00088F4109209081092080810920B0810928B |
:107DC0000A0889E090E002C088E090E09093710892 |
:107DD0008093700881E090E0F1CD80916E089091E1 |
:107DE0006F08181619060CF040C310926F08109215 |
:107DF0006E082091DD043091DE044091DF04509143 |
:107E0000E004A0900808B090090880916308909160 |
:107E10006408A81AB90AB092DE04A092DD04C091E9 |
:107E20000A08D0910B088091650890916608C81BDC |
:107E3000D90BD093E004C093DF04C090E304D0904A |
:107E4000E404CA0CDB1CD092E404C092E304009169 |
:107E5000E1041091E2040C0F1D1F1093E204009343 |
:107E6000E104F501E21BF30BF093DC04E093DB0487 |
:107E70007E01E41AF50AF092DA04E092D9048091C6 |
:107E8000EF049091F0042091D7043091D8048090B1 |
:107E9000D5049090D60418161906FCF4C901880F71 |
:107EA000991F63E070E00E9493459B01CF0163E05E |
:107EB00070E00E949345260F371F3093D80420931B |
:107EC000D704C401880F991F63E070E00E949345B6 |
:107ED0009B01C70163E070E022C0C90164E070E06B |
:107EE0000E9493459B01CF01880F991F8E0F9F1F02 |
:107EF00064E070E00E949345260F371F3093D8044A |
:107F00002093D704C40164E070E00E9493459B0174 |
:107F1000C701880F991F8E0D9F1D64E070E00E94BD |
:107F20009345260F371F3093D6042093D504C601FE |
:107F3000D7FE04C0882799278C199D09815395473E |
:107F400054F4C80117FF04C088279927801B910BA0 |
:107F50008153954764F0CA18DB08D092E404C092BC |
:107F6000E3040C1B1D0B1093E2040093E1048091C9 |
:107F7000F1049091F2041816190644F41092E404E6 |
:107F80001092E3041092E2041092E104B501B7FEEE |
:107F900003C0709561957F4FCE01D7FF03C09095C8 |
:107FA00081959F4F0E9452426091DF047091E004DE |
:107FB000AC018091DD049091DE040E948C439B0112 |
:107FC000AC018091EF049091F004892B81F4CA01F7 |
:107FD000B90123E030E040E050E00E94C845E901EB |
:107FE0002A96C531D10594F0C4E1D0E00FC0CA0192 |
:107FF000B9012AE030E040E050E00E94C845E901C4 |
:108000002A96C031D10514F0CFE0D0E0E09073049F |
:10801000FF24002711276091E3047091E40488276E |
:1080200077FD8095982FA80197010E94544520E282 |
:1080300030E040E050E00E94C84559016A0160917B |
:10804000E1047091E204882777FD8095982FA801BC |
:1080500097010E94544520E230E040E050E00E9449 |
:10806000C8453093E2042093E10430E6A3163FEFC5 |
:10807000B3063FEFC3063FEFD30644F460E6A62EF7 |
:108080006FEFB62E6FEFC62E6FEFD62E98018701D9 |
:1080900000364FEF14074FEF24074FEF340724F457 |
:1080A00000E61FEF2FEF3FEF80917204E82EFF24D0 |
:1080B00080917404882E992451EAA516B104C10454 |
:1080C000D1042CF050EAA52EB12CC12CD12C8091DA |
:1080D000DD049091DE04880F991FAC01E49EC0017D |
:1080E000E59E900DF49E900D112460E170E00E94D9 |
:1080F0009345FB01EA0DFB1D8091D7049091D804B4 |
:10810000AC01849EC001859E900D949E900D11241B |
:10811000AC01C49FC001C59F900DD49F900D112448 |
:108120006AE070E00E949345E60FF71FF0936B083A |
:10813000E0936A0858016901013A110521053105EA |
:108140002CF030EAA32EB12CC12CD12C8091DF046D |
:108150009091E004880F991F9C01E29EC001E39E6C |
:10816000900DF29E900D112460E170E00E94934505 |
:108170009B012A0D3B1D8091D5049091D604AC0142 |
:10818000849EC001859E900D949E900D1124AC019B |
:10819000C49FC001C59F900DD49F900D11246AE02B |
:1081A00070E00E949345260F371F30936D0820938F |
:1081B0006C08B901CF010E9452429C0190935B0868 |
:1081C00080935A0800916A0810916B0817FD03C04C |
:1081D0008AE590E002C08EE091E0821B930B9093C1 |
:1081E0005B0880935A086091DD077091DE078091EB |
:1081F000DF079091E007C0915A08D0915B0822EE0A |
:1082000034E040E050E00E94C845CE01821B930B51 |
:108210009C019093070880930608853B91057CF0AC |
:10822000C43BD1051CF0285631400FC088E691E0D0 |
:10823000821B930B90930708809306080AC09FEF58 |
:108240002C34390734F428593E4F309307082093D3 |
:108250000608C0906C08D0906D08980117FF04C004 |
:1082600022273327201B310BC601D7FE04C08827E5 |
:1082700099278C199D098217930754F4CE010E9407 |
:108280002E437C01B801882777FD8095982F09C07F |
:10829000CE010E9484437C01B601882777FD80953A |
:1082A000982F28EE33E040E050E00E94544500272C |
:1082B000F7FC0095102FA80197010E94C845B9014D |
:1082C00037FF03C0709561957F4F5B01CC24B7FCED |
:1082D000C094DC2CB0925708A092560880910608F2 |
:1082E000909107080E942E439C01442737FD40953A |
:1082F000542FC601B5010E94544528EE33E040E0FA |
:1083000050E00E94C8453093D0042093CF04809160 |
:108310000608909107080E9484439C01442737FD7A |
:108320004095542FC601B5010E94544528EE33E014 |
:1083300040E050E00E94C845309521953F4F309372 |
:10834000CE042093CD048091CF049091D00441E0DD |
:10835000813494071CF080E491E005C0805C9E4F5E |
:1083600034F480EC9EEF9093D0048093CF0481E0AE |
:10837000213438071CF080E491E005C0205C3E4FBA |
:1083800034F480EC9EEF9093CE048093CD048091E2 |
:10839000CF049091D0040AE510E09C01209FC00119 |
:1083A000219F900D309F900D112460E471E00E9498 |
:1083B0009345CB010E942E43AA2797FDA095BA2F83 |
:1083C000BC01CD0129E130E040E050E00E94C84509 |
:1083D0003093D0042093CF048091CD049091CE04AB |
:1083E000AC01409FC001419F900D509F900D112402 |
:1083F00060E471E00E949345CB010E942E43AA27BE |
:1084000097FDA095BA2FBC01CD0129E130E040E0F5 |
:1084100050E00E94C8453093CE042093CD04809153 |
:10842000DD049091DE0497FF03C0909581959F4FE6 |
:108430008159914064F48091DF049091E00497FFAA |
:1084400003C0909581959F4F815991404CF01092B7 |
:10845000D0041092CF041092CE041092CD04B5CA6D |
:1084600034E06316710449F4A7CA44E06416710449 |
:1084700021F4A2CA81E090E002C080E090E0DF91A8 |
:10848000CF911F910F91FF90EF90DF90CF90BF9011 |
:10849000AF909F908F907F906F905F904F903F90A4 |
:1084A0002F900895EF92FF920F931F93CF93DF9336 |
:1084B0008C01EB019C0197FF04C022273327281B66 |
:1084C000390BCE01D7FF04C0882799278C1B9D0B41 |
:1084D000821793073CF4CE01E8018C01B1E0EB2E4A |
:1084E000F12C02C0EE24FF24209741F40115110560 |
:1084F00029F461E070E080E090E024C0B8018827B2 |
:1085000077FD8095982F28EE33E040E050E00E9400 |
:1085100054459E01442737FD4095542F0E94C8457D |
:10852000B90137FF03C0709561957F4F882777FDAC |
:108530008095982F6D3021E0720720E0820720E0BF |
:10854000920704F524E630E040E050E00E945445F4 |
:108550002CE031E040E050E00E94C845CA01B9017A |
:10856000A4E0660F771F881F991FAA95D1F7621B99 |
:10857000730B840B950B24E630E040E050E00E9442 |
:10858000C84553C0633422E0720720E0820720E030 |
:10859000920734F524E630E040E050E00E94544574 |
:1085A000605B78468040904026E331E040E050E058 |
:1085B0000E94C845CA01B901F4E0660F771F881F01 |
:1085C000991FFA95D1F7621B730B840B950B24E668 |
:1085D00030E040E050E00E94C845215F3F4F25C099 |
:1085E00022E330E040E050E00E945445645E704772 |
:1085F0008040904026EA31E040E050E00E94C845CB |
:10860000CA01B901E4E0660F771F881F991FEA9538 |
:10861000D1F7621B730B840B950B22E330E040E033 |
:1086200050E00E94C845225E3F4FEF2829F48AE5BA |
:1086300090E0821B930B9C0117FD03C0D7FF06C07F |
:1086400002C0D7FD03C0309521953F4FC901DF918E |
:10865000CF911F910F91FF90EF900895FC01F7FFCC |
:1086600004C0882799278E1B9F0B8856914034F0B1 |
:10867000CF0168E671E00E949345FC01F7FD03C05D |
:1086800041E050E005C0F095E195FF4F4FEF5FEFFF |
:10869000CF018B5590408A35910530F484EB90E002 |
:1086A0008E1B9F0BFC010FC0CF01855B90408A356C |
:1086B000910518F4E45BF0400EC0CF018F5091405B |
:1086C0008A35910518F021E030E007C088E691E096 |
:1086D0008E1B9F0BFC012FEF3FEFEE0FFF1FEF5D97 |
:1086E000FB4F85919491BC01629FC001639F900DE7 |
:1086F000729F900D11249C01429FC001439F900DD9 |
:10870000529F900D112408952AE530E0281B390B63 |
:10871000C9010E942E430895EF92FF920F931F9379 |
:10872000CF93DF93EA01AC0197FF04C0442755279C |
:10873000481B590B9B0177FF04C022273327261BB8 |
:10874000370B2417350794F49C01B901882777FD6E |
:108750008095982F28EE33E040E050E00E94544589 |
:108760007B018C01CE010E942E430FC0882777FD2C |
:108770008095982F28EE33E040E050E00E94544569 |
:108780007B018C01CE010E9484439C01442737FD6C |
:108790004095542FC801B7010E94C845B90137FF61 |
:1087A00003C0709561957F4F882777FD8095982F3E |
:1087B000DF91CF911F910F91FF90EF900895FC01F1 |
:1087C0004150504030F001900616D1F73197CF015B |
:1087D00008958827992708955058192EEFD001D071 |
:1087E000D2C0BA176207730784079507B1F188F4FE |
:1087F0000EF410940B2EBA2FA02D062E622F202DD2 |
:10880000072E732F302D082E842F402D092E952FE3 |
:10881000502DFF275523B9F0591B49F0573E98F0CA |
:10882000469537952795A795F0405395C9F776F06B |
:10883000BA0F621F731F841F30F487957795679571 |
:10884000B795F040939517FA0F2E0895BF1BBB27DD |
:10885000BA0B620B730B840BF6CFDEF6DBC0AED027 |
:1088600001D091C0552359F0992369F09F575F5764 |
:10887000951B33F442F4903811F4915805C09BC015 |
:1088800091589F3F09F4C6C0BB2711246217730794 |
:10889000840730F4660F771F881FBB1F915098F331 |
:1088A00011D00F920FD00F920DD0A0E826173707E6 |
:1088B00048071B0609F0A048BA2F602D7F918F91C1 |
:1088C00000240895A0E80024621773078407B10507 |
:1088D00028F0621B730B840BB1090A2A660F771FFD |
:1088E000881FBB1FA69581F7089597FB73D09F370C |
:1088F00038F0FEE9F91B982F872F762F6B2F05C0D4 |
:1089000086C09695879577956795F150D0F73EF498 |
:1089100090958095709561957F4F8F4F9F4F0895EB |
:10892000E89403C097FB0EF4F3DFB62F672F782F80 |
:10893000892F9EE9002427C00ED05EF004C00BD022 |
:1089400026F001C008D019F020F48FEF089580E0E0 |
:10895000089581E0089597FB092E052600F8689494 |
:1089600030D0E89407FC07C06217730784079507A7 |
:1089700021F008F400940794989408959A95BB0FF9 |
:10898000661F771F881F11249923A1F08823B2F74F |
:108990009F3F59F0BB0F48F421F4002011F460FF11 |
:1089A00004C06F5F7F4F8F4F9F4F881F97958795AC |
:1089B00097F908952CC09FEF80EC0895052E0926A5 |
:1089C00007FA440F551F5F3F79F0AA27A51708F053 |
:1089D00051E04795880F991F9F3F31F0BB27B9178A |
:1089E00008F091E0879508959F919F911124E3CF1E |
:1089F00097FB880F991F9F3F31F0BB27B91708F0ED |
:108A000091E0879508959F919F911124D4CF662777 |
:108A10007727882799270895D1DF01D0B4CF9923EC |
:108A200039F0552329F09F575F57950F13F49AF1AA |
:108A3000F1CF91589F3FE1F3629FA12D0F92BB2789 |
:108A4000639FA00DB11DEE27729FA00DB11DEE1FFB |
:108A5000AF93AA27649FB00DE11D739FB00DE11D78 |
:108A6000AA1F6627829FB00DE11DA61F5527749F80 |
:108A7000E00DA11D551F839FE00DA11D561F849F72 |
:108A8000A00D511D852F7A2F6E2F1F900F908823D8 |
:108A90001AF4939539F48FCF000C111CBB1F661F7D |
:108AA000771F881F01280895629FD001739FF001EE |
:108AB000829FE00DF11D649FE00DF11D929FF00D6E |
:108AC000839FF00D749FF00D659FF00D9927729FA5 |
:108AD000B00DE11DF91F639FB00DE11DF91FBD0130 |
:108AE000CF0111240895991B79E004C0991F9617AE |
:108AF00008F0961B881F7A95C9F780950895AA1BE0 |
:108B0000BB1B51E107C0AA1FBB1FA617B70710F078 |
:108B1000A61BB70B881F991F5A95A9F780959095AA |
:108B2000BC01CD01089597FB092E07260AD077FDD9 |
:108B300004D0E5DF06D000201AF4709561957F4FD0 |
:108B40000895F6F7909581959F4F0895A1E21A2E0A |
:108B5000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1FE1 |
:108B6000A217B307E407F50720F0A21BB30BE40B31 |
:108B7000F50B661F771F881F991F1A9469F7609578 |
:108B80007095809590959B01AC01BD01CF01089532 |
:108B900097FB092E05260ED057FD04D0D7DF0AD04B |
:108BA000001C38F450954095309521953F4F4F4F1C |
:108BB0005F4F0895F6F790958095709561957F4F7A |
:108BC0008F4F9F4F0895F999FECFB2BDA1BDF89A7E |
:108BD000119600B40895F999FECFB2BDA1BD00BCB5 |
:108BE00011960FB6F894FA9AF99A0FBE0895FFCF2E |
:108BF0000A01FF64496E74656772616C4E69636B4C |
:108C000020202020496E74656772616C526F6C6C15 |
:108C1000202020204163634E69636B2020202020A8 |
:108C200020202020416363526F6C6C202020202084 |
:108C3000202020204779726F47696572202020200C |
:108C400020202020486F6568656E5765727420206B |
:108C5000202020204163635A202020202020202033 |
:108C60002020202047617320202020202020202049 |
:108C7000202020204B6F6D7061737356616C756599 |
:108C80002020202045727361747A6B6F6D70617360 |
:108C900073202020456D7066616E672020202020A3 |
:108CA00020202020416E616C6F6731312020202010 |
:108CB000202020204D6F746F725F566F726E65209A |
:108CC000202020204D6F746F725F48696E74656E4E |
:108CD000202020204D6F746F725F4C696E6B732083 |
:108CE000202020204D6F746F725F5265636874732B |
:108CF00020202020496E646578202020202020201C |
:108D00002020202055426174202020202020202077 |
:108D1000202020204D657373776572745F4E696300 |
:108D20006B2020204D657373776572745F526F6C92 |
:108D30006C2020204D657373776572745F47696599 |
:108D400072202020537469636B5F4E69636B20202F |
:108D500020202020537469636B5F526F6C6C20205D |
:108D600009200000537469636B5F476965722020B6 |
:108D700020202020526F6C6C4F6666736574202033 |
:108D800020202020496E74526F6C6C2A46616B74EF |
:108D90006F72202075746D5F6561737420202020D0 |
:108DA0002020202075746D5F6E6F72746820202003 |
:108DB0002020202075746D5F616C7420202020209D |
:108DC000202020206770735F7374617465202020F9 |
:108DD00020202020492D4C616765526F6C6C20204B |
:108DE00020202020537469636B526F6C6C2020200C |
:108DF00020202020FFFF0A016400007D0000FF0307 |
:108E00000102030405060708090A48616C6C6F201B |
:108E100057656C74000000000000000000000000B6 |
:108E20000000000000000000000000000000000042 |
:108E30000000000000000000000000000000000032 |
:108E40000000000000000000000000000000000022 |
:108E5000000000000000000000000A014265676990 |
:108E60006E6E657200004E6F726D616C0000537023 |
:108E70006F72740000640090D0030090D00300175C |
:108E8000B7D13830FB103A409696020A644664EC3B |
:028E9000FF00E1 |
:00000001FF |
/branches/salvo_gps/Basis_v0067g/trunk/Flight_Ctrl.elf |
---|
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/salvo_gps/Basis_v0067g/trunk/GPS.c |
---|
0,0 → 1,639 |
/* |
This program (files gps.c and gps.h) is free software; you can redistribute it and/or modify |
it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; |
either version 3 of the License, or (at your option) any later version. |
This program 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 and GNU Lesser General Public License for more details. |
You should have received a copy of GNU General Public License (License_GPL.txt) and |
GNU Lesser General Public License (License_LGPL.txt) along with this program. |
If not, see <http://www.gnu.org/licenses/>. |
Please note: All the other files for the project "Mikrokopter" by H.Buss are under the license (license_buss.txt) published by www.mikrokopter.de |
*/ |
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Peter Muehlenbrock |
Auswertung der Daten vom GPS im ublox Format |
Hold Modus mit PID Regler |
Rückstuerz zur Basis Funktion |
Stand 24.10.2007 |
Anederung: 24.10. Altitude in relativer Position jetzt auch drin |
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
*/ |
#include "main.h" |
//#include "gps.h" |
// Defines fuer ublox Messageformat um Auswertung zu steuern |
#define UBLOX_IDLE 0 |
#define UBLOX_SYNC1 1 |
#define UBLOX_SYNC2 2 |
#define UBLOX_CLASS 3 |
#define UBLOX_ID 4 |
#define UBLOX_LEN1 5 |
#define UBLOX_LEN2 6 |
#define UBLOX_CKA 7 |
#define UBLOX_CKB 8 |
#define UBLOX_PAYLOAD 9 |
// ublox Protokoll Identifier |
#define UBLOX_NAV_POSUTM 0x08 |
#define UBLOX_NAV_STATUS 0x03 |
#define UBLOX_NAV_VELED 0x12 |
#define UBLOX_NAV_CLASS 0x01 |
#define UBLOX_SYNCH1_CHAR 0xB5 |
#define UBLOX_SYNCH2_CHAR 0x62 |
signed int GPS_Nick = 0; |
signed int GPS_Roll = 0; |
short int ublox_msg_state = UBLOX_IDLE; |
static uint8_t chk_a =0; //Checksum |
static uint8_t chk_b =0; |
short int gps_state,gps_sub_state; //Zustaende der Statemachine |
short int gps_updte_flag; |
signed int GPS_hdng_abs_2trgt; //Winkel zum Ziel bezogen auf Nordpol |
signed int GPS_hdng_rel_2trgt; //Winkel zum Ziel bezogen auf Nordachse des Kopters |
signed int GPS_dist_2trgt; //vorzeichenlose Distanz zum Ziel |
signed int gps_int_x,gps_int_y,gps_reg_x,gps_reg_y; |
static unsigned int rx_len; |
static unsigned int ptr_payload_data_end; |
unsigned int gps_alive_cnt; // Wird bei jedem gueltigen GPS Telegramm hochgezaehlt |
signed int hdng_2home,dist_2home; //Richtung und Entfernung zur home Position |
static signed gps_tick; //wird bei jedem Update durch das GPS Modul hochgezaehlt |
static short int hold_fast,hold_reset_int; //Flags fuer Hold Regler |
static uint8_t *ptr_payload_data; |
static uint8_t *ptr_pac_status; |
long int dist_flown; |
short int Get_GPS_data(void); |
NAV_POSUTM_t actual_pos; // Aktuelle Nav Daten werden hier im ublox Format abgelegt |
NAV_STATUS_t actual_status; // Aktueller Nav Status |
NAV_VELNED_t actual_speed; // Aktueller Geschwindigkeits und Richtungsdaten |
GPS_ABS_POSITION_t gps_act_position; // Alle wichtigen Daten zusammengefasst |
GPS_ABS_POSITION_t gps_home_position; // Die Startposition, beim Kalibrieren ermittelt |
GPS_REL_POSITION_t gps_rel_act_position; // Die aktuelle relative Position bezogen auf Home Position |
GPS_REL_POSITION_t gps_rel_hold_position; // Die gespeicherte Sollposition fuer GPS_ Hold Mode |
GPS_REL_POSITION_t gps_rel_start_position; // Die gespeicherte Ausgangsposition fuer GPS_ Home Mode |
// Initialisierung |
void GPS_Neutral(void) |
{ |
ublox_msg_state = UBLOX_IDLE; |
gps_state = GPS_CRTL_IDLE; |
gps_sub_state = GPS_CRTL_IDLE; |
actual_pos.status = 0; |
actual_speed.status = 0; |
actual_status.status = 0; |
gps_home_position.status = 0; // Noch keine gueltige Home Position |
gps_act_position.status = 0; |
gps_rel_act_position.status = 0; |
GPS_Nick = 0; |
GPS_Roll = 0; |
gps_updte_flag = 0; |
gps_int_x = 0; |
gps_int_y = 0; |
gps_alive_cnt = 0; |
} |
// Home Position sichern falls Daten verfuegbar sind. |
void GPS_Save_Home(void) |
{ |
short int n; |
n = Get_GPS_data(); |
if (n == 0) // Gueltige und aktuelle Daten ? |
{ |
// Neue GPS Daten liegen vor |
gps_home_position.utm_east = gps_act_position.utm_east; |
gps_home_position.utm_north = gps_act_position.utm_north; |
gps_home_position.utm_alt = gps_act_position.utm_alt; |
gps_home_position.status = 1; // Home Position gueltig |
} |
} |
// Relative Position zur Home Position bestimmen |
// Rueckgabewert 0= Daten sind aktuell und gueltig. 1= Keine Aenderung. 2= Daten ungueltig |
short int Get_Rel_Position(void) |
{ |
short int n = 0; |
n = Get_GPS_data(); |
if (n >=1) return (n); // nix zu tun, weil keine neue Daten da sind |
if (gps_alive_cnt < 400) gps_alive_cnt += 300; // Timeoutzaehler. Wird in Motorregler Routine ueberwacht und dekrementiert |
if (gps_home_position.status > 0) //Nur wenn Home Position vorliegt |
{ |
gps_rel_act_position.utm_east = (int) (gps_act_position.utm_east - gps_home_position.utm_east); |
gps_rel_act_position.utm_north = (int) (gps_act_position.utm_north - gps_home_position.utm_north); |
gps_rel_act_position.utm_alt = (int) (gps_act_position.utm_alt - gps_home_position.utm_alt); |
gps_rel_act_position.status = 1; // gueltige Positionsdaten |
n = 0; |
gps_updte_flag = 1; // zeigt an, dass neue Daten vorliegen. |
} |
else |
{ |
n = 2; //keine gueltigen Daten vorhanden |
gps_rel_act_position.status = 0; //keine gueltige Position weil keine home Position da ist. |
} |
return (n); |
} |
// Daten aus aktuellen ublox Messages extrahieren |
// Rueckgabewert 0= Daten sind aktuell und gueltig. 1= Keine Aenderung. 2= Daten ungueltig |
short int Get_GPS_data(void) |
{ |
short int n = 1; |
if (actual_pos.status == 0) return (1); //damit es schnell geht, wenn nix zu tun ist |
if ((actual_pos.status > 0) && (actual_status.status > 0) && (actual_speed.status > 0)) |
{ |
if (((actual_status.gpsfix_type & 0x03) >=2) && ((actual_status.nav_status_flag & 0x01) >=1)) // nur wenn Daten aktuell und gueltig sind |
{ |
gps_act_position.utm_east = actual_pos.utm_east/10; |
gps_act_position.utm_north = actual_pos.utm_north/10; |
gps_act_position.utm_alt = actual_pos.utm_alt/10; |
gps_act_position.speed_gnd = actual_speed.speed_gnd/10; |
gps_act_position.speed_gnd = actual_speed.speed_gnd/10; |
gps_act_position.heading = actual_speed.heading/100000; |
gps_act_position.status = 1; |
n = 0; //Daten gueltig |
} |
else |
{ |
gps_act_position.status = 0; //Keine gueltigen Daten |
n = 2; |
} |
actual_pos.status = 0; //neue ublox Messages anfordern |
actual_status.status = 0; |
actual_speed.status = 0; |
} |
return (n); |
} |
/* |
Daten vom GPS im ublox MSG Format auswerten |
Die Routine wird bei jedem Empfang eines Zeichens vom GPS Modul durch den UART IRQ aufgerufen |
// Die UBX Messages NAV_POSUTM, NAV_STATUS und NAV_VALED muessen aktiviert sein |
*/ |
void Get_Ublox_Msg(uint8_t rx) |
{ |
switch (ublox_msg_state) |
{ |
case UBLOX_IDLE: // Zuerst Synchcharacters pruefen |
if ( rx == UBLOX_SYNCH1_CHAR ) ublox_msg_state = UBLOX_SYNC1; |
else ublox_msg_state = UBLOX_IDLE; |
break; |
case UBLOX_SYNC1: |
if (rx == UBLOX_SYNCH2_CHAR) ublox_msg_state = UBLOX_SYNC2; |
else ublox_msg_state = UBLOX_IDLE; |
chk_a = 0,chk_b = 0; |
break; |
case UBLOX_SYNC2: |
if (rx == UBLOX_NAV_CLASS) ublox_msg_state = UBLOX_CLASS; |
else ublox_msg_state = UBLOX_IDLE; |
break; |
case UBLOX_CLASS: // Nur NAV Meldungen auswerten |
switch (rx) |
{ |
case UBLOX_NAV_POSUTM: |
ptr_pac_status = &actual_pos.status; |
if (*ptr_pac_status > 0) ublox_msg_state = UBLOX_IDLE; //Abbruch weil Daten noch nicht verwendet wurden |
else |
{ |
ptr_payload_data = &actual_pos; |
ptr_payload_data_end = &actual_pos.status; |
ublox_msg_state = UBLOX_LEN1; |
} |
break; |
case UBLOX_NAV_STATUS: |
ptr_pac_status = &actual_status.status; |
if (*ptr_pac_status > 0) ublox_msg_state = UBLOX_IDLE; |
else |
{ |
ptr_payload_data = &actual_status; |
ptr_payload_data_end = &actual_status.status; |
ublox_msg_state = UBLOX_LEN1; |
} |
break; |
case UBLOX_NAV_VELED: |
ptr_pac_status = &actual_speed.status; |
if (*ptr_pac_status > 0) ublox_msg_state = UBLOX_IDLE; |
else |
{ |
ptr_payload_data = &actual_speed; |
ptr_payload_data_end = &actual_speed.status; |
ublox_msg_state = UBLOX_LEN1; |
} |
break; |
default: |
ublox_msg_state = UBLOX_IDLE; |
break; |
} |
chk_a = UBLOX_NAV_CLASS + rx; |
chk_b = UBLOX_NAV_CLASS + chk_a; |
break; |
case UBLOX_LEN1: // Laenge auswerten |
rx_len = rx; |
chk_a += rx; |
chk_b += chk_a; |
ublox_msg_state = UBLOX_LEN2; |
break; |
case UBLOX_LEN2: // Laenge auswerten |
rx_len = rx_len + (rx *256); // Laenge ermitteln |
chk_a += rx; |
chk_b += chk_a; |
ublox_msg_state = UBLOX_PAYLOAD; |
break; |
case UBLOX_PAYLOAD: // jetzt Nutzdaten einlesen |
if (rx_len > 0) |
{ |
*ptr_payload_data = rx; |
chk_a += rx; |
chk_b += chk_a; |
--rx_len; |
if ((rx_len > 0) && (ptr_payload_data <= ptr_payload_data_end)) |
{ |
ptr_payload_data++; |
ublox_msg_state = UBLOX_PAYLOAD; |
} |
else ublox_msg_state = UBLOX_CKA; |
} |
else ublox_msg_state = UBLOX_IDLE; // Abbruch wegen Fehler |
break; |
case UBLOX_CKA: // Checksum pruefen |
if (rx == chk_a) ublox_msg_state = UBLOX_CKB; |
else ublox_msg_state = UBLOX_IDLE; // Abbruch wegen Fehler |
break; |
case UBLOX_CKB: // Checksum pruefen |
if (rx == chk_b) *ptr_pac_status = 1; // Paket ok |
ublox_msg_state = UBLOX_IDLE; |
break; |
default: |
ublox_msg_state = UBLOX_IDLE; |
break; |
} |
} |
//Zentrale Statemachine fuer alle GPS relevanten Regelungsablauefe |
short int GPS_CRTL(short int cmd) |
{ |
static unsigned int cnt; //Zaehler fuer diverse Verzoegerungen |
static signed int int_east,int_north; //Integrierer |
static signed int dist_north,dist_east; |
static signed int diff_east,diff_north; // Differenzierer (Differenz zum vorhergehenden x bzw. y Wert) |
static signed int diff_east_f,diff_north_f; // Differenzierer, gefiltert |
signed int n,diff_v; |
static signed int gps_g2t_act_v; // Aktuelle Geschwindigkeitsvorgabe fuer Home Funktion |
long signed int dev,n_l; |
signed int dist_frm_start_east,dist_frm_start_north; |
switch (cmd) |
{ |
case GPS_CMD_REQ_HOME: // Es soll zum Startpunkt zurueckgeflogen werden. |
if ((gps_state != GPS_CRTL_HOLD_ACTIVE) && (gps_state != GPS_CRTL_HOME_ACTIVE)) |
{ |
cnt++; |
if (cnt > 500) // erst nach Verzoegerung |
{ |
// Erst mal initialisieren |
cnt = 0; |
gps_tick = 0; |
hold_fast = 0; |
hold_reset_int = 0; // Integrator enablen |
int_east = 0, int_north = 0; |
gps_reg_x = 0, gps_reg_y = 0; |
dist_east = 0, dist_north = 0; |
diff_east_f = 0, diff_north_f= 0; |
diff_east = 0, diff_north = 0; |
dist_flown = 0; |
gps_g2t_act_v = 0; |
gps_sub_state = GPS_CRTL_IDLE; |
// aktuelle positionsdaten abspeichern |
if (gps_rel_act_position.status > 0) |
{ |
gps_rel_start_position.utm_east = gps_rel_act_position.utm_east; |
gps_rel_start_position.utm_north= gps_rel_act_position.utm_north; |
gps_rel_start_position.status = 1; // gueltige Positionsdaten |
gps_rel_hold_position.utm_east = gps_rel_act_position.utm_east; |
gps_rel_hold_position.utm_north = gps_rel_act_position.utm_north; |
gps_rel_hold_position.status = 1; // gueltige Positionsdaten |
//Richtung zur Home Position bezogen auf Nordpol bestimmen |
hdng_2home = arctan_i(-gps_rel_start_position.utm_east,-gps_rel_start_position.utm_north); |
// in Winkel 0...360 Grad umrechnen |
if (( gps_rel_start_position.utm_east < 0)) hdng_2home = ( 90-hdng_2home); |
else hdng_2home = (270 - hdng_2home); |
dist_2home = (int) get_dist(gps_rel_start_position.utm_east,gps_rel_start_position.utm_north,hdng_2home); //Entfernung zur Home Position bestimmen |
gps_state = GPS_CRTL_HOME_ACTIVE; |
return (GPS_STST_OK); |
} |
else |
{ |
gps_rel_start_position.status = 0; //Keine Daten verfuegbar |
gps_state = GPS_CRTL_IDLE; |
return(GPS_STST_ERR); // Keine Daten da |
} |
} |
else return(GPS_STST_PEND); // noch warten |
} |
break; |
// ****************************** |
case GPS_CMD_REQ_HOLD: // Die Lageregelung soll aktiviert werden. |
if (gps_state != GPS_CRTL_HOLD_ACTIVE) |
{ |
cnt++; |
if (cnt > 500) // erst nach Verzoegerung |
{ |
cnt = 0; |
// aktuelle positionsdaten abspeichern |
if (gps_rel_act_position.status > 0) |
{ |
hold_fast = 0; |
hold_reset_int = 0; // Integrator enablen |
int_east = 0, int_north = 0; |
gps_reg_x = 0, gps_reg_y = 0; |
dist_east = 0, dist_north = 0; |
diff_east_f = 0, diff_north_f= 0; |
diff_east = 0, diff_north = 0; |
gps_rel_hold_position.utm_east = gps_rel_act_position.utm_east; |
gps_rel_hold_position.utm_north = gps_rel_act_position.utm_north; |
gps_rel_hold_position.status = 1; // gueltige Positionsdaten |
gps_state = GPS_CRTL_HOLD_ACTIVE; |
return (GPS_STST_OK); |
} |
else |
{ |
gps_rel_hold_position.status = 0; //Keine Daten verfuegbar |
gps_state = GPS_CRTL_IDLE; |
return(GPS_STST_ERR); // Keine Daten da |
} |
} |
else return(GPS_STST_PEND); // noch warten |
} |
break; |
case GPS_CMD_STOP: // Lageregelung beenden |
cnt = 0; |
GPS_Nick = 0; |
GPS_Roll = 0; |
gps_int_x = 0; |
gps_int_y = 0; |
gps_sub_state = GPS_CRTL_IDLE; |
gps_state = GPS_CRTL_IDLE; |
return (GPS_STST_OK); |
break; |
default: |
return (GPS_STST_ERR); |
break; |
} |
switch (gps_state) |
{ |
case GPS_CRTL_IDLE: |
cnt = 0; |
return (GPS_STST_OK); |
break; |
case GPS_CRTL_HOME_ACTIVE: // Rueckflug zur Basis |
//Der Sollwert des Lagereglers wird der Homeposition angenaehert |
if (gps_rel_start_position.status >0) |
{ |
if ((gps_updte_flag > 0) && (gps_sub_state !=GPS_HOME_FINISHED)) // nur wenn neue GPS Daten vorliegen und nicht schon alles fertig ist |
{ |
gps_tick++; |
int d1,d2,d3; |
d1 = abs (gps_rel_hold_position.utm_east - gps_rel_act_position.utm_east ); |
d2 = abs (gps_rel_hold_position.utm_north - gps_rel_act_position.utm_north ); |
d3 = (dist_2home - (int)dist_flown); // Restdistanz zum Ziel |
if (d3 > GPS_G2T_DIST_MAX_STOP) // Schneller Rueckflug, noch weit weg vom Ziel |
{ |
if ((d1 < GPS_G2T_FAST_TOL) && (d2 < GPS_G2T_FAST_TOL)) //nur weiter wenn Lage innerhalb der Toleranz |
{ |
if (gps_g2t_act_v < GPS_G2T_V_MAX) gps_g2t_act_v++; //Geschwindigkeit langsam erhoehen |
dist_flown +=(long)gps_g2t_act_v; // Vorgabe der Strecke anhand der Geschwindigkeit |
gps_sub_state = GPS_HOME_FAST_IN_TOL; |
} |
else //Den Lageregler in Ruhe arbeiten lassen weil ausserhalb der Toleranz |
{ |
if (gps_g2t_act_v > 1) gps_g2t_act_v--; // Geschwindigkeit reduzieren |
dist_flown++; //Auch ausserhalb der Toleranz langsam erhoehen |
gps_sub_state = GPS_HOME_FAST_OUTOF_TOL; |
} |
hold_reset_int = 0; // Integrator einsschalten |
hold_fast = 1; // Regler fuer schnellen Flug |
dist_frm_start_east = (int)((dist_flown * (long)sin_i(hdng_2home))/1000); |
dist_frm_start_north = (int)((dist_flown * (long)cos_i(hdng_2home))/1000); |
gps_rel_hold_position.utm_east = gps_rel_start_position.utm_east + dist_frm_start_east; //naechster Zielpunkt |
gps_rel_hold_position.utm_north = gps_rel_start_position.utm_north + dist_frm_start_north; //naechster Zielpunkt |
} |
else if (d3 > GPS_G2T_DIST_HOLD) //Das Ziel naehert sich, deswegen abbremsen |
{ |
if ((d1 < GPS_G2T_NRML_TOL) && (d2 < GPS_G2T_NRML_TOL)) |
{ |
dist_flown += GPS_G2T_V_RAMP_DWN; // Vorgabe der Strecke anhand der Geschwindigkeit |
gps_sub_state = GPS_HOME_RMPDWN_IN_TOL; |
} |
else |
{ |
dist_flown++; //Auch ausserhalb der Toleranz langsam erhoehen |
gps_sub_state = GPS_HOME_RMPDWN_OUTOF_TOL; |
} |
hold_reset_int = 0; // Integrator ausschalten |
hold_fast = 1; // Wieder normal regeln |
dist_frm_start_east = (int)((dist_flown * (long)sin_i(hdng_2home))/1000); |
dist_frm_start_north = (int)((dist_flown * (long)cos_i(hdng_2home))/1000); |
gps_rel_hold_position.utm_east = gps_rel_start_position.utm_east + dist_frm_start_east; //naechster Zielpunkt |
gps_rel_hold_position.utm_north = gps_rel_start_position.utm_north + dist_frm_start_north; //naechster Zielpunkt |
} |
else //Soll-Ziel fast erreicht, Jetzt noch Reste ausgleichen, weil Zielpunkt nicht exakt bestimmt werden konnte (Fehler in Winkelfkt) |
{ |
if ((d1 < GPS_G2T_NRML_TOL) && (d2 < GPS_G2T_NRML_TOL)) // Jetzt bis zum Zielpunkt regeln |
{ |
gps_sub_state = GPS_HOME_IN_TOL; |
hold_fast = 0; // Wieder normal regeln |
hold_reset_int = 0; // Integrator wieder aktivieren |
if (gps_rel_hold_position.utm_east >= GPS_G2T_V_MIN) gps_rel_hold_position.utm_east -= GPS_G2T_V_MIN; |
else if (gps_rel_hold_position.utm_east <= -GPS_G2T_V_MIN ) gps_rel_hold_position.utm_east += GPS_G2T_V_MIN; |
if (gps_rel_hold_position.utm_north >= GPS_G2T_V_MIN) gps_rel_hold_position.utm_north -= GPS_G2T_V_MIN; |
else if (gps_rel_hold_position.utm_north <= - GPS_G2T_V_MIN ) gps_rel_hold_position.utm_north += GPS_G2T_V_MIN; |
if ((abs(gps_rel_hold_position.utm_east) <= GPS_G2T_V_MIN) && (abs(gps_rel_hold_position.utm_north) <=GPS_G2T_V_MIN)) |
{ |
gps_rel_hold_position.utm_east = 0; |
gps_rel_hold_position.utm_north = 0; |
gps_sub_state = GPS_HOME_FINISHED; |
} |
} |
else gps_sub_state = GPS_HOME_OUTOF_TOL; |
} |
} |
gps_state = GPS_CRTL_HOLD_ACTIVE; //Zwischensprung |
return (GPS_STST_OK); |
} |
else // Keine GPS Daten verfuegbar, deswegen Abbruch |
{ |
gps_state = GPS_CRTL_IDLE; |
return (GPS_STST_ERR); |
} |
break; |
case GPS_CRTL_HOLD_ACTIVE: // Hier werden die Daten fuer Nick und Roll errechnet |
if (gps_updte_flag >0) // nur wenn neue GPS Daten vorliegen |
{ |
gps_updte_flag = 0; |
// ab hier wird geregelt |
diff_east = -dist_east; //Alten Wert fuer Differenzier schon mal abziehen |
diff_north = -dist_north; |
dist_east = gps_rel_hold_position.utm_east - gps_rel_act_position.utm_east; |
dist_north = gps_rel_hold_position.utm_north - gps_rel_act_position.utm_north; |
int_east += dist_east; |
int_north += dist_north; |
diff_east += dist_east; // Differenz zur vorhergehenden East Position |
diff_north += dist_north; // Differenz zur vorhergehenden North Position |
if (hold_fast > 0) // wegen Sollpositionsspruengen im Fast Mode Differenzierer daempfen |
{ |
diff_east_f = ((diff_east_f *2)/3) + (diff_east *1/3); //Differenzierer filtern |
diff_north_f = ((diff_north_f *2)/3) + (diff_north*1/3); //Differenzierer filtern |
} |
else // schwache Filterung |
{ |
diff_east_f = ((diff_east_f * 1)/4) + ((diff_east *3)/4); //Differenzierer filtern |
diff_north_f = ((diff_north_f * 1)/4) + ((diff_north*3)/4); //Differenzierer filtern |
} |
#define GPSINT_MAX 30000 //neuer Wert ab 7.10.2007 Begrenzung |
if ((abs(int_east) > GPSINT_MAX) || (abs(int_north)> GPSINT_MAX)) //Bei zu hohem Wert Integrator auf Wert halten |
{ |
int_east -= dist_east; |
int_north -= dist_north; |
} |
if (hold_reset_int > 0) //Im Schnellen Mode Integrator abschalten |
{ |
int_east = 0; |
int_north = 0; |
} |
// Variable Verstarkung fuer Differenzierer ermitteln. Je weiter vom Ziel wir entfernt sind |
// desto groesser wird der Faktor. Es gibt aber einen Maximalwert. Bei 0 ist die Verstaerkung immer 1 |
signed long dist,int_east1,int_north1; |
int phi; |
phi = arctan_i(abs(dist_north),abs(dist_east)); |
dist = get_dist(dist_east,dist_north,phi); //Zunaechst Entfernung zum Ziel ermitteln |
if (hold_fast == 0) // je Nach Modus andere Verstaerkungskurve fuer Differenzierer |
{ |
diff_v = (int)((dist * (GPS_DIFF_NRML_MAX_V - 10)) / GPS_DIFF_NRML_MAX_D) +10; //Verstaerkung * 10 |
if (diff_v > GPS_DIFF_NRML_MAX_V) diff_v = GPS_DIFF_NRML_MAX_V; //begrenzen |
} |
else |
{ |
diff_v = (int)((dist * (GPS_DIFF_FAST_MAX_V - 10)) / GPS_DIFF_FAST_MAX_D) +10; //Verstaerkung * 10 |
if (diff_v > GPS_DIFF_FAST_MAX_V) diff_v = GPS_DIFF_FAST_MAX_V; //begrenzen |
} |
int diff_p; //Vom Modus abhaengige zusaetzliche Verstaerkung |
if (hold_fast > 0) diff_p = GPS_PROP_FAST_V; |
else diff_p = GPS_PROP_NRML_V; |
//I Werte begrenzen |
#define INT1_MAX (20 * GPS_V) |
int_east1 = ((((long)int_east) * Parameter_UserParam2)/32); |
int_north = ((((long)int_north) * Parameter_UserParam2)/32); |
if (int_east1 > INT1_MAX) int_east1 = INT1_MAX; //begrenzen |
else if (int_east1 < -INT1_MAX) int_east1 = -INT1_MAX; |
if (int_north1 > INT1_MAX) int_north1 = INT1_MAX; //begrenzen |
else if (int_north1 < -INT1_MAX) int_north1 = -INT1_MAX; |
//PID Regler Werte aufsummieren |
gps_reg_x = ((int)int_east1 + ((dist_east * Parameter_UserParam1 * diff_p)/(8*2))+ ((diff_east_f * diff_v * Parameter_UserParam3)/10)); // I + P +D Anteil X Achse |
gps_reg_y = ((int)int_north1 + ((dist_north * Parameter_UserParam1 * diff_p)/(8*2))+ ((diff_north_f * diff_v * Parameter_UserParam3)/10)); // I + P +D Anteil Y Achse |
//Ziel-Richtung bezogen auf Nordpol bestimmen |
GPS_hdng_abs_2trgt = arctan_i(gps_reg_x,gps_reg_y); |
// in Winkel 0...360 Grad umrechnen |
if ((gps_reg_x >= 0)) GPS_hdng_abs_2trgt = ( 90-GPS_hdng_abs_2trgt); |
else GPS_hdng_abs_2trgt = (270 - GPS_hdng_abs_2trgt); |
// Relative Richtung in bezug auf Nordachse des Kopters errechen |
n= GyroKomp_Int/GYROKOMP_INC_GRAD_DEFAULT; |
GPS_hdng_rel_2trgt = GPS_hdng_abs_2trgt - n; |
if ((GPS_hdng_rel_2trgt >180) && (GPS_hdng_abs_2trgt >=180)) GPS_hdng_rel_2trgt = GPS_hdng_rel_2trgt-360; |
else if (GPS_hdng_rel_2trgt >180) GPS_hdng_rel_2trgt = 360 - GPS_hdng_rel_2trgt; |
else if (GPS_hdng_rel_2trgt <-180) GPS_hdng_rel_2trgt = 360 + GPS_hdng_rel_2trgt; |
// Regelabweichung aus x,y zu Ziel in Distanz umrechnen |
if (abs(gps_reg_x) > abs(gps_reg_y) ) |
{ |
dev = (long)gps_reg_x; //Groesseren Wert wegen besserer Genauigkeit nehmen |
dev = abs((dev *1000) / (long) sin_i(GPS_hdng_abs_2trgt)); |
} |
else |
{ |
dev = (long)gps_reg_y; |
dev = abs((dev *1000) / (long) cos_i(GPS_hdng_abs_2trgt)); |
} |
GPS_dist_2trgt = (int) dev; |
// Winkel und Distanz in Nick und Rollgroessen umrechnen |
GPS_Roll = (int) +( (dev * (long) sin_i(GPS_hdng_rel_2trgt))/1000); |
GPS_Nick = (int) -( (dev * (long) cos_i(GPS_hdng_rel_2trgt))/1000); |
if (GPS_Roll > (GPS_NICKROLL_MAX * GPS_V)) GPS_Roll = (GPS_NICKROLL_MAX * GPS_V); |
else if (GPS_Roll < -(GPS_NICKROLL_MAX * GPS_V)) GPS_Roll = -(GPS_NICKROLL_MAX * GPS_V); |
if (GPS_Nick > (GPS_NICKROLL_MAX * GPS_V)) GPS_Nick = (GPS_NICKROLL_MAX * GPS_V); |
else if (GPS_Nick < -(GPS_NICKROLL_MAX * GPS_V)) GPS_Nick = -(GPS_NICKROLL_MAX * GPS_V); |
//Kleine Werte verstaerken, Grosse abschwaechen |
n = sin_i((GPS_Roll*90)/(GPS_NICKROLL_MAX * GPS_V)); |
n_l = ((long) GPS_NICKROLL_MAX * (long) n)/1000; |
GPS_Roll = (int) n_l; |
n = sin_i((GPS_Nick*90)/(GPS_NICKROLL_MAX * GPS_V)); |
n_l = ((long) GPS_NICKROLL_MAX * (long) n)/1000; |
GPS_Nick = (int) n_l; |
if ((abs(dist_east) > GPS_DIST_MAX) || (abs(dist_north) > GPS_DIST_MAX)) // bei zu grossem Abstand abbrechen |
{ |
GPS_Roll = 0; |
GPS_Nick = 0; |
gps_state = GPS_CRTL_IDLE; |
return (GPS_STST_ERR); |
break; |
} |
else |
{ |
if ( cmd == GPS_CMD_REQ_HOME ) gps_state = GPS_CRTL_HOME_ACTIVE; // State umsetzen |
return (GPS_STST_OK); |
} |
} |
else |
{ |
if ( cmd == GPS_CMD_REQ_HOME ) gps_state = GPS_CRTL_HOME_ACTIVE; // State umsetzen |
return (GPS_STST_OK); |
} |
break; |
default: |
gps_state = GPS_CRTL_IDLE; |
return (GPS_STST_ERR); |
break; |
} |
return (GPS_STST_ERR); |
} |
/branches/salvo_gps/Basis_v0067g/trunk/License_GPL.txt |
---|
0,0 → 1,674 |
GNU GENERAL PUBLIC LICENSE |
Version 3, 29 June 2007 |
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> |
Everyone is permitted to copy and distribute verbatim copies |
of this license document, but changing it is not allowed. |
Preamble |
The GNU General Public License is a free, copyleft license for |
software and other kinds of works. |
The licenses for most software and other practical works are designed |
to take away your freedom to share and change the works. By contrast, |
the GNU General Public License is intended to guarantee your freedom to |
share and change all versions of a program--to make sure it remains free |
software for all its users. We, the Free Software Foundation, use the |
GNU General Public License for most of our software; it applies also to |
any other work released this way by its authors. You can apply it to |
your programs, too. |
When we speak of free software, we are referring to freedom, not |
price. Our General Public Licenses are designed to make sure that you |
have the freedom to distribute copies of free software (and charge for |
them if you wish), that you receive source code or can get it if you |
want it, that you can change the software or use pieces of it in new |
free programs, and that you know you can do these things. |
To protect your rights, we need to prevent others from denying you |
these rights or asking you to surrender the rights. Therefore, you have |
certain responsibilities if you distribute copies of the software, or if |
you modify it: responsibilities to respect the freedom of others. |
For example, if you distribute copies of such a program, whether |
gratis or for a fee, you must pass on to the recipients the same |
freedoms that you received. You must make sure that they, too, receive |
or can get the source code. And you must show them these terms so they |
know their rights. |
Developers that use the GNU GPL protect your rights with two steps: |
(1) assert copyright on the software, and (2) offer you this License |
giving you legal permission to copy, distribute and/or modify it. |
For the developers' and authors' protection, the GPL clearly explains |
that there is no warranty for this free software. For both users' and |
authors' sake, the GPL requires that modified versions be marked as |
changed, so that their problems will not be attributed erroneously to |
authors of previous versions. |
Some devices are designed to deny users access to install or run |
modified versions of the software inside them, although the manufacturer |
can do so. This is fundamentally incompatible with the aim of |
protecting users' freedom to change the software. The systematic |
pattern of such abuse occurs in the area of products for individuals to |
use, which is precisely where it is most unacceptable. Therefore, we |
have designed this version of the GPL to prohibit the practice for those |
products. If such problems arise substantially in other domains, we |
stand ready to extend this provision to those domains in future versions |
of the GPL, as needed to protect the freedom of users. |
Finally, every program is threatened constantly by software patents. |
States should not allow patents to restrict development and use of |
software on general-purpose computers, but in those that do, we wish to |
avoid the special danger that patents applied to a free program could |
make it effectively proprietary. To prevent this, the GPL assures that |
patents cannot be used to render the program non-free. |
The precise terms and conditions for copying, distribution and |
modification follow. |
TERMS AND CONDITIONS |
0. Definitions. |
"This License" refers to version 3 of the GNU General Public License. |
"Copyright" also means copyright-like laws that apply to other kinds of |
works, such as semiconductor masks. |
"The Program" refers to any copyrightable work licensed under this |
License. Each licensee is addressed as "you". "Licensees" and |
"recipients" may be individuals or organizations. |
To "modify" a work means to copy from or adapt all or part of the work |
in a fashion requiring copyright permission, other than the making of an |
exact copy. The resulting work is called a "modified version" of the |
earlier work or a work "based on" the earlier work. |
A "covered work" means either the unmodified Program or a work based |
on the Program. |
To "propagate" a work means to do anything with it that, without |
permission, would make you directly or secondarily liable for |
infringement under applicable copyright law, except executing it on a |
computer or modifying a private copy. Propagation includes copying, |
distribution (with or without modification), making available to the |
public, and in some countries other activities as well. |
To "convey" a work means any kind of propagation that enables other |
parties to make or receive copies. Mere interaction with a user through |
a computer network, with no transfer of a copy, is not conveying. |
An interactive user interface displays "Appropriate Legal Notices" |
to the extent that it includes a convenient and prominently visible |
feature that (1) displays an appropriate copyright notice, and (2) |
tells the user that there is no warranty for the work (except to the |
extent that warranties are provided), that licensees may convey the |
work under this License, and how to view a copy of this License. If |
the interface presents a list of user commands or options, such as a |
menu, a prominent item in the list meets this criterion. |
1. Source Code. |
The "source code" for a work means the preferred form of the work |
for making modifications to it. "Object code" means any non-source |
form of a work. |
A "Standard Interface" means an interface that either is an official |
standard defined by a recognized standards body, or, in the case of |
interfaces specified for a particular programming language, one that |
is widely used among developers working in that language. |
The "System Libraries" of an executable work include anything, other |
than the work as a whole, that (a) is included in the normal form of |
packaging a Major Component, but which is not part of that Major |
Component, and (b) serves only to enable use of the work with that |
Major Component, or to implement a Standard Interface for which an |
implementation is available to the public in source code form. A |
"Major Component", in this context, means a major essential component |
(kernel, window system, and so on) of the specific operating system |
(if any) on which the executable work runs, or a compiler used to |
produce the work, or an object code interpreter used to run it. |
The "Corresponding Source" for a work in object code form means all |
the source code needed to generate, install, and (for an executable |
work) run the object code and to modify the work, including scripts to |
control those activities. However, it does not include the work's |
System Libraries, or general-purpose tools or generally available free |
programs which are used unmodified in performing those activities but |
which are not part of the work. For example, Corresponding Source |
includes interface definition files associated with source files for |
the work, and the source code for shared libraries and dynamically |
linked subprograms that the work is specifically designed to require, |
such as by intimate data communication or control flow between those |
subprograms and other parts of the work. |
The Corresponding Source need not include anything that users |
can regenerate automatically from other parts of the Corresponding |
Source. |
The Corresponding Source for a work in source code form is that |
same work. |
2. Basic Permissions. |
All rights granted under this License are granted for the term of |
copyright on the Program, and are irrevocable provided the stated |
conditions are met. This License explicitly affirms your unlimited |
permission to run the unmodified Program. The output from running a |
covered work is covered by this License only if the output, given its |
content, constitutes a covered work. This License acknowledges your |
rights of fair use or other equivalent, as provided by copyright law. |
You may make, run and propagate covered works that you do not |
convey, without conditions so long as your license otherwise remains |
in force. You may convey covered works to others for the sole purpose |
of having them make modifications exclusively for you, or provide you |
with facilities for running those works, provided that you comply with |
the terms of this License in conveying all material for which you do |
not control copyright. Those thus making or running the covered works |
for you must do so exclusively on your behalf, under your direction |
and control, on terms that prohibit them from making any copies of |
your copyrighted material outside their relationship with you. |
Conveying under any other circumstances is permitted solely under |
the conditions stated below. Sublicensing is not allowed; section 10 |
makes it unnecessary. |
3. Protecting Users' Legal Rights From Anti-Circumvention Law. |
No covered work shall be deemed part of an effective technological |
measure under any applicable law fulfilling obligations under article |
11 of the WIPO copyright treaty adopted on 20 December 1996, or |
similar laws prohibiting or restricting circumvention of such |
measures. |
When you convey a covered work, you waive any legal power to forbid |
circumvention of technological measures to the extent such circumvention |
is effected by exercising rights under this License with respect to |
the covered work, and you disclaim any intention to limit operation or |
modification of the work as a means of enforcing, against the work's |
users, your or third parties' legal rights to forbid circumvention of |
technological measures. |
4. Conveying Verbatim Copies. |
You may convey verbatim copies of the Program's source code as you |
receive it, in any medium, provided that you conspicuously and |
appropriately publish on each copy an appropriate copyright notice; |
keep intact all notices stating that this License and any |
non-permissive terms added in accord with section 7 apply to the code; |
keep intact all notices of the absence of any warranty; and give all |
recipients a copy of this License along with the Program. |
You may charge any price or no price for each copy that you convey, |
and you may offer support or warranty protection for a fee. |
5. Conveying Modified Source Versions. |
You may convey a work based on the Program, or the modifications to |
produce it from the Program, in the form of source code under the |
terms of section 4, provided that you also meet all of these conditions: |
a) The work must carry prominent notices stating that you modified |
it, and giving a relevant date. |
b) The work must carry prominent notices stating that it is |
released under this License and any conditions added under section |
7. This requirement modifies the requirement in section 4 to |
"keep intact all notices". |
c) You must license the entire work, as a whole, under this |
License to anyone who comes into possession of a copy. This |
License will therefore apply, along with any applicable section 7 |
additional terms, to the whole of the work, and all its parts, |
regardless of how they are packaged. This License gives no |
permission to license the work in any other way, but it does not |
invalidate such permission if you have separately received it. |
d) If the work has interactive user interfaces, each must display |
Appropriate Legal Notices; however, if the Program has interactive |
interfaces that do not display Appropriate Legal Notices, your |
work need not make them do so. |
A compilation of a covered work with other separate and independent |
works, which are not by their nature extensions of the covered work, |
and which are not combined with it such as to form a larger program, |
in or on a volume of a storage or distribution medium, is called an |
"aggregate" if the compilation and its resulting copyright are not |
used to limit the access or legal rights of the compilation's users |
beyond what the individual works permit. Inclusion of a covered work |
in an aggregate does not cause this License to apply to the other |
parts of the aggregate. |
6. Conveying Non-Source Forms. |
You may convey a covered work in object code form under the terms |
of sections 4 and 5, provided that you also convey the |
machine-readable Corresponding Source under the terms of this License, |
in one of these ways: |
a) Convey the object code in, or embodied in, a physical product |
(including a physical distribution medium), accompanied by the |
Corresponding Source fixed on a durable physical medium |
customarily used for software interchange. |
b) Convey the object code in, or embodied in, a physical product |
(including a physical distribution medium), accompanied by a |
written offer, valid for at least three years and valid for as |
long as you offer spare parts or customer support for that product |
model, to give anyone who possesses the object code either (1) a |
copy of the Corresponding Source for all the software in the |
product that is covered by this License, on a durable physical |
medium customarily used for software interchange, for a price no |
more than your reasonable cost of physically performing this |
conveying of source, or (2) access to copy the |
Corresponding Source from a network server at no charge. |
c) Convey individual copies of the object code with a copy of the |
written offer to provide the Corresponding Source. This |
alternative is allowed only occasionally and noncommercially, and |
only if you received the object code with such an offer, in accord |
with subsection 6b. |
d) Convey the object code by offering access from a designated |
place (gratis or for a charge), and offer equivalent access to the |
Corresponding Source in the same way through the same place at no |
further charge. You need not require recipients to copy the |
Corresponding Source along with the object code. If the place to |
copy the object code is a network server, the Corresponding Source |
may be on a different server (operated by you or a third party) |
that supports equivalent copying facilities, provided you maintain |
clear directions next to the object code saying where to find the |
Corresponding Source. Regardless of what server hosts the |
Corresponding Source, you remain obligated to ensure that it is |
available for as long as needed to satisfy these requirements. |
e) Convey the object code using peer-to-peer transmission, provided |
you inform other peers where the object code and Corresponding |
Source of the work are being offered to the general public at no |
charge under subsection 6d. |
A separable portion of the object code, whose source code is excluded |
from the Corresponding Source as a System Library, need not be |
included in conveying the object code work. |
A "User Product" is either (1) a "consumer product", which means any |
tangible personal property which is normally used for personal, family, |
or household purposes, or (2) anything designed or sold for incorporation |
into a dwelling. In determining whether a product is a consumer product, |
doubtful cases shall be resolved in favor of coverage. For a particular |
product received by a particular user, "normally used" refers to a |
typical or common use of that class of product, regardless of the status |
of the particular user or of the way in which the particular user |
actually uses, or expects or is expected to use, the product. A product |
is a consumer product regardless of whether the product has substantial |
commercial, industrial or non-consumer uses, unless such uses represent |
the only significant mode of use of the product. |
"Installation Information" for a User Product means any methods, |
procedures, authorization keys, or other information required to install |
and execute modified versions of a covered work in that User Product from |
a modified version of its Corresponding Source. The information must |
suffice to ensure that the continued functioning of the modified object |
code is in no case prevented or interfered with solely because |
modification has been made. |
If you convey an object code work under this section in, or with, or |
specifically for use in, a User Product, and the conveying occurs as |
part of a transaction in which the right of possession and use of the |
User Product is transferred to the recipient in perpetuity or for a |
fixed term (regardless of how the transaction is characterized), the |
Corresponding Source conveyed under this section must be accompanied |
by the Installation Information. But this requirement does not apply |
if neither you nor any third party retains the ability to install |
modified object code on the User Product (for example, the work has |
been installed in ROM). |
The requirement to provide Installation Information does not include a |
requirement to continue to provide support service, warranty, or updates |
for a work that has been modified or installed by the recipient, or for |
the User Product in which it has been modified or installed. Access to a |
network may be denied when the modification itself materially and |
adversely affects the operation of the network or violates the rules and |
protocols for communication across the network. |
Corresponding Source conveyed, and Installation Information provided, |
in accord with this section must be in a format that is publicly |
documented (and with an implementation available to the public in |
source code form), and must require no special password or key for |
unpacking, reading or copying. |
7. Additional Terms. |
"Additional permissions" are terms that supplement the terms of this |
License by making exceptions from one or more of its conditions. |
Additional permissions that are applicable to the entire Program shall |
be treated as though they were included in this License, to the extent |
that they are valid under applicable law. If additional permissions |
apply only to part of the Program, that part may be used separately |
under those permissions, but the entire Program remains governed by |
this License without regard to the additional permissions. |
When you convey a copy of a covered work, you may at your option |
remove any additional permissions from that copy, or from any part of |
it. (Additional permissions may be written to require their own |
removal in certain cases when you modify the work.) You may place |
additional permissions on material, added by you to a covered work, |
for which you have or can give appropriate copyright permission. |
Notwithstanding any other provision of this License, for material you |
add to a covered work, you may (if authorized by the copyright holders of |
that material) supplement the terms of this License with terms: |
a) Disclaiming warranty or limiting liability differently from the |
terms of sections 15 and 16 of this License; or |
b) Requiring preservation of specified reasonable legal notices or |
author attributions in that material or in the Appropriate Legal |
Notices displayed by works containing it; or |
c) Prohibiting misrepresentation of the origin of that material, or |
requiring that modified versions of such material be marked in |
reasonable ways as different from the original version; or |
d) Limiting the use for publicity purposes of names of licensors or |
authors of the material; or |
e) Declining to grant rights under trademark law for use of some |
trade names, trademarks, or service marks; or |
f) Requiring indemnification of licensors and authors of that |
material by anyone who conveys the material (or modified versions of |
it) with contractual assumptions of liability to the recipient, for |
any liability that these contractual assumptions directly impose on |
those licensors and authors. |
All other non-permissive additional terms are considered "further |
restrictions" within the meaning of section 10. If the Program as you |
received it, or any part of it, contains a notice stating that it is |
governed by this License along with a term that is a further |
restriction, you may remove that term. If a license document contains |
a further restriction but permits relicensing or conveying under this |
License, you may add to a covered work material governed by the terms |
of that license document, provided that the further restriction does |
not survive such relicensing or conveying. |
If you add terms to a covered work in accord with this section, you |
must place, in the relevant source files, a statement of the |
additional terms that apply to those files, or a notice indicating |
where to find the applicable terms. |
Additional terms, permissive or non-permissive, may be stated in the |
form of a separately written license, or stated as exceptions; |
the above requirements apply either way. |
8. Termination. |
You may not propagate or modify a covered work except as expressly |
provided under this License. Any attempt otherwise to propagate or |
modify it is void, and will automatically terminate your rights under |
this License (including any patent licenses granted under the third |
paragraph of section 11). |
However, if you cease all violation of this License, then your |
license from a particular copyright holder is reinstated (a) |
provisionally, unless and until the copyright holder explicitly and |
finally terminates your license, and (b) permanently, if the copyright |
holder fails to notify you of the violation by some reasonable means |
prior to 60 days after the cessation. |
Moreover, your license from a particular copyright holder is |
reinstated permanently if the copyright holder notifies you of the |
violation by some reasonable means, this is the first time you have |
received notice of violation of this License (for any work) from that |
copyright holder, and you cure the violation prior to 30 days after |
your receipt of the notice. |
Termination of your rights under this section does not terminate the |
licenses of parties who have received copies or rights from you under |
this License. If your rights have been terminated and not permanently |
reinstated, you do not qualify to receive new licenses for the same |
material under section 10. |
9. Acceptance Not Required for Having Copies. |
You are not required to accept this License in order to receive or |
run a copy of the Program. Ancillary propagation of a covered work |
occurring solely as a consequence of using peer-to-peer transmission |
to receive a copy likewise does not require acceptance. However, |
nothing other than this License grants you permission to propagate or |
modify any covered work. These actions infringe copyright if you do |
not accept this License. Therefore, by modifying or propagating a |
covered work, you indicate your acceptance of this License to do so. |
10. Automatic Licensing of Downstream Recipients. |
Each time you convey a covered work, the recipient automatically |
receives a license from the original licensors, to run, modify and |
propagate that work, subject to this License. You are not responsible |
for enforcing compliance by third parties with this License. |
An "entity transaction" is a transaction transferring control of an |
organization, or substantially all assets of one, or subdividing an |
organization, or merging organizations. If propagation of a covered |
work results from an entity transaction, each party to that |
transaction who receives a copy of the work also receives whatever |
licenses to the work the party's predecessor in interest had or could |
give under the previous paragraph, plus a right to possession of the |
Corresponding Source of the work from the predecessor in interest, if |
the predecessor has it or can get it with reasonable efforts. |
You may not impose any further restrictions on the exercise of the |
rights granted or affirmed under this License. For example, you may |
not impose a license fee, royalty, or other charge for exercise of |
rights granted under this License, and you may not initiate litigation |
(including a cross-claim or counterclaim in a lawsuit) alleging that |
any patent claim is infringed by making, using, selling, offering for |
sale, or importing the Program or any portion of it. |
11. Patents. |
A "contributor" is a copyright holder who authorizes use under this |
License of the Program or a work on which the Program is based. The |
work thus licensed is called the contributor's "contributor version". |
A contributor's "essential patent claims" are all patent claims |
owned or controlled by the contributor, whether already acquired or |
hereafter acquired, that would be infringed by some manner, permitted |
by this License, of making, using, or selling its contributor version, |
but do not include claims that would be infringed only as a |
consequence of further modification of the contributor version. For |
purposes of this definition, "control" includes the right to grant |
patent sublicenses in a manner consistent with the requirements of |
this License. |
Each contributor grants you a non-exclusive, worldwide, royalty-free |
patent license under the contributor's essential patent claims, to |
make, use, sell, offer for sale, import and otherwise run, modify and |
propagate the contents of its contributor version. |
In the following three paragraphs, a "patent license" is any express |
agreement or commitment, however denominated, not to enforce a patent |
(such as an express permission to practice a patent or covenant not to |
sue for patent infringement). To "grant" such a patent license to a |
party means to make such an agreement or commitment not to enforce a |
patent against the party. |
If you convey a covered work, knowingly relying on a patent license, |
and the Corresponding Source of the work is not available for anyone |
to copy, free of charge and under the terms of this License, through a |
publicly available network server or other readily accessible means, |
then you must either (1) cause the Corresponding Source to be so |
available, or (2) arrange to deprive yourself of the benefit of the |
patent license for this particular work, or (3) arrange, in a manner |
consistent with the requirements of this License, to extend the patent |
license to downstream recipients. "Knowingly relying" means you have |
actual knowledge that, but for the patent license, your conveying the |
covered work in a country, or your recipient's use of the covered work |
in a country, would infringe one or more identifiable patents in that |
country that you have reason to believe are valid. |
If, pursuant to or in connection with a single transaction or |
arrangement, you convey, or propagate by procuring conveyance of, a |
covered work, and grant a patent license to some of the parties |
receiving the covered work authorizing them to use, propagate, modify |
or convey a specific copy of the covered work, then the patent license |
you grant is automatically extended to all recipients of the covered |
work and works based on it. |
A patent license is "discriminatory" if it does not include within |
the scope of its coverage, prohibits the exercise of, or is |
conditioned on the non-exercise of one or more of the rights that are |
specifically granted under this License. You may not convey a covered |
work if you are a party to an arrangement with a third party that is |
in the business of distributing software, under which you make payment |
to the third party based on the extent of your activity of conveying |
the work, and under which the third party grants, to any of the |
parties who would receive the covered work from you, a discriminatory |
patent license (a) in connection with copies of the covered work |
conveyed by you (or copies made from those copies), or (b) primarily |
for and in connection with specific products or compilations that |
contain the covered work, unless you entered into that arrangement, |
or that patent license was granted, prior to 28 March 2007. |
Nothing in this License shall be construed as excluding or limiting |
any implied license or other defenses to infringement that may |
otherwise be available to you under applicable patent law. |
12. No Surrender of Others' Freedom. |
If conditions are imposed on you (whether by court order, agreement or |
otherwise) that contradict the conditions of this License, they do not |
excuse you from the conditions of this License. If you cannot convey a |
covered work so as to satisfy simultaneously your obligations under this |
License and any other pertinent obligations, then as a consequence you may |
not convey it at all. For example, if you agree to terms that obligate you |
to collect a royalty for further conveying from those to whom you convey |
the Program, the only way you could satisfy both those terms and this |
License would be to refrain entirely from conveying the Program. |
13. Use with the GNU Affero General Public License. |
Notwithstanding any other provision of this License, you have |
permission to link or combine any covered work with a work licensed |
under version 3 of the GNU Affero General Public License into a single |
combined work, and to convey the resulting work. The terms of this |
License will continue to apply to the part which is the covered work, |
but the special requirements of the GNU Affero General Public License, |
section 13, concerning interaction through a network will apply to the |
combination as such. |
14. Revised Versions of this License. |
The Free Software Foundation may publish revised and/or new versions of |
the GNU General Public License from time to time. Such new versions will |
be similar in spirit to the present version, but may differ in detail to |
address new problems or concerns. |
Each version is given a distinguishing version number. If the |
Program specifies that a certain numbered version of the GNU General |
Public License "or any later version" applies to it, you have the |
option of following the terms and conditions either of that numbered |
version or of any later version published by the Free Software |
Foundation. If the Program does not specify a version number of the |
GNU General Public License, you may choose any version ever published |
by the Free Software Foundation. |
If the Program specifies that a proxy can decide which future |
versions of the GNU General Public License can be used, that proxy's |
public statement of acceptance of a version permanently authorizes you |
to choose that version for the Program. |
Later license versions may give you additional or different |
permissions. However, no additional obligations are imposed on any |
author or copyright holder as a result of your choosing to follow a |
later version. |
15. Disclaimer of Warranty. |
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY |
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT |
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY |
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, |
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM |
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF |
ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
16. Limitation of Liability. |
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS |
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY |
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE |
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF |
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD |
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), |
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF |
SUCH DAMAGES. |
17. Interpretation of Sections 15 and 16. |
If the disclaimer of warranty and limitation of liability provided |
above cannot be given local legal effect according to their terms, |
reviewing courts shall apply local law that most closely approximates |
an absolute waiver of all civil liability in connection with the |
Program, unless a warranty or assumption of liability accompanies a |
copy of the Program in return for a fee. |
END OF TERMS AND CONDITIONS |
How to Apply These Terms to Your New Programs |
If you develop a new program, and you want it to be of the greatest |
possible use to the public, the best way to achieve this is to make it |
free software which everyone can redistribute and change under these terms. |
To do so, attach the following notices to the program. It is safest |
to attach them to the start of each source file to most effectively |
state the exclusion of warranty; and each file should have at least |
the "copyright" line and a pointer to where the full notice is found. |
<one line to give the program's name and a brief idea of what it does.> |
Copyright (C) <year> <name of author> |
This program 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 3 of the License, or |
(at your option) any later version. |
This program 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 program. If not, see <http://www.gnu.org/licenses/>. |
Also add information on how to contact you by electronic and paper mail. |
If the program does terminal interaction, make it output a short |
notice like this when it starts in an interactive mode: |
<program> Copyright (C) <year> <name of author> |
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
This is free software, and you are welcome to redistribute it |
under certain conditions; type `show c' for details. |
The hypothetical commands `show w' and `show c' should show the appropriate |
parts of the General Public License. Of course, your program's commands |
might be different; for a GUI interface, you would use an "about box". |
You should also get your employer (if you work as a programmer) or school, |
if any, to sign a "copyright disclaimer" for the program, if necessary. |
For more information on this, and how to apply and follow the GNU GPL, see |
<http://www.gnu.org/licenses/>. |
The GNU General Public License does not permit incorporating your program |
into proprietary programs. If your program is a subroutine library, you |
may consider it more useful to permit linking proprietary applications with |
the library. If this is what you want to do, use the GNU Lesser General |
Public License instead of this License. But first, please read |
<http://www.gnu.org/philosophy/why-not-lgpl.html>. |
/branches/salvo_gps/Basis_v0067g/trunk/License_LPGL.txt |
---|
0,0 → 1,165 |
GNU LESSER GENERAL PUBLIC LICENSE |
Version 3, 29 June 2007 |
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> |
Everyone is permitted to copy and distribute verbatim copies |
of this license document, but changing it is not allowed. |
This version of the GNU Lesser General Public License incorporates |
the terms and conditions of version 3 of the GNU General Public |
License, supplemented by the additional permissions listed below. |
0. Additional Definitions. |
As used herein, "this License" refers to version 3 of the GNU Lesser |
General Public License, and the "GNU GPL" refers to version 3 of the GNU |
General Public License. |
"The Library" refers to a covered work governed by this License, |
other than an Application or a Combined Work as defined below. |
An "Application" is any work that makes use of an interface provided |
by the Library, but which is not otherwise based on the Library. |
Defining a subclass of a class defined by the Library is deemed a mode |
of using an interface provided by the Library. |
A "Combined Work" is a work produced by combining or linking an |
Application with the Library. The particular version of the Library |
with which the Combined Work was made is also called the "Linked |
Version". |
The "Minimal Corresponding Source" for a Combined Work means the |
Corresponding Source for the Combined Work, excluding any source code |
for portions of the Combined Work that, considered in isolation, are |
based on the Application, and not on the Linked Version. |
The "Corresponding Application Code" for a Combined Work means the |
object code and/or source code for the Application, including any data |
and utility programs needed for reproducing the Combined Work from the |
Application, but excluding the System Libraries of the Combined Work. |
1. Exception to Section 3 of the GNU GPL. |
You may convey a covered work under sections 3 and 4 of this License |
without being bound by section 3 of the GNU GPL. |
2. Conveying Modified Versions. |
If you modify a copy of the Library, and, in your modifications, a |
facility refers to a function or data to be supplied by an Application |
that uses the facility (other than as an argument passed when the |
facility is invoked), then you may convey a copy of the modified |
version: |
a) under this License, provided that you make a good faith effort to |
ensure that, in the event an Application does not supply the |
function or data, the facility still operates, and performs |
whatever part of its purpose remains meaningful, or |
b) under the GNU GPL, with none of the additional permissions of |
this License applicable to that copy. |
3. Object Code Incorporating Material from Library Header Files. |
The object code form of an Application may incorporate material from |
a header file that is part of the Library. You may convey such object |
code under terms of your choice, provided that, if the incorporated |
material is not limited to numerical parameters, data structure |
layouts and accessors, or small macros, inline functions and templates |
(ten or fewer lines in length), you do both of the following: |
a) Give prominent notice with each copy of the object code that the |
Library is used in it and that the Library and its use are |
covered by this License. |
b) Accompany the object code with a copy of the GNU GPL and this license |
document. |
4. Combined Works. |
You may convey a Combined Work under terms of your choice that, |
taken together, effectively do not restrict modification of the |
portions of the Library contained in the Combined Work and reverse |
engineering for debugging such modifications, if you also do each of |
the following: |
a) Give prominent notice with each copy of the Combined Work that |
the Library is used in it and that the Library and its use are |
covered by this License. |
b) Accompany the Combined Work with a copy of the GNU GPL and this license |
document. |
c) For a Combined Work that displays copyright notices during |
execution, include the copyright notice for the Library among |
these notices, as well as a reference directing the user to the |
copies of the GNU GPL and this license document. |
d) Do one of the following: |
0) Convey the Minimal Corresponding Source under the terms of this |
License, and the Corresponding Application Code in a form |
suitable for, and under terms that permit, the user to |
recombine or relink the Application with a modified version of |
the Linked Version to produce a modified Combined Work, in the |
manner specified by section 6 of the GNU GPL for conveying |
Corresponding Source. |
1) Use a suitable shared library mechanism for linking with the |
Library. A suitable mechanism is one that (a) uses at run time |
a copy of the Library already present on the user's computer |
system, and (b) will operate properly with a modified version |
of the Library that is interface-compatible with the Linked |
Version. |
e) Provide Installation Information, but only if you would otherwise |
be required to provide such information under section 6 of the |
GNU GPL, and only to the extent that such information is |
necessary to install and execute a modified version of the |
Combined Work produced by recombining or relinking the |
Application with a modified version of the Linked Version. (If |
you use option 4d0, the Installation Information must accompany |
the Minimal Corresponding Source and Corresponding Application |
Code. If you use option 4d1, you must provide the Installation |
Information in the manner specified by section 6 of the GNU GPL |
for conveying Corresponding Source.) |
5. Combined Libraries. |
You may place library facilities that are a work based on the |
Library side by side in a single library together with other library |
facilities that are not Applications and are not covered by this |
License, and convey such a combined library under terms of your |
choice, if you do both of the following: |
a) Accompany the combined library with a copy of the same work based |
on the Library, uncombined with any other library facilities, |
conveyed under the terms of this License. |
b) Give prominent notice with the combined library that part of it |
is a work based on the Library, and explaining where to find the |
accompanying uncombined form of the same work. |
6. Revised Versions of the GNU Lesser General Public License. |
The Free Software Foundation may publish revised and/or new versions |
of the GNU Lesser General Public License from time to time. Such new |
versions will be similar in spirit to the present version, but may |
differ in detail to address new problems or concerns. |
Each version is given a distinguishing version number. If the |
Library as you received it specifies that a certain numbered version |
of the GNU Lesser General Public License "or any later version" |
applies to it, you have the option of following the terms and |
conditions either of that published version or of any later version |
published by the Free Software Foundation. If the Library as you |
received it does not specify a version number of the GNU Lesser |
General Public License, you may choose any version of the GNU Lesser |
General Public License ever published by the Free Software Foundation. |
If the Library as you received it specifies that a proxy can decide |
whether future versions of the GNU Lesser General Public License shall |
apply, that proxy's public statement of acceptance of any version is |
permanent authorization for you to choose that version for the |
Library. |
/branches/salvo_gps/Basis_v0067g/trunk/License_buss.txt |
---|
0,0 → 1,52 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + Nur für den privaten Gebrauch |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nichtkommerziellen Gebrauch zulässig ist. |
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
// + bzgl. der Nutzungsbedingungen aufzunehmen. |
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
// + Verkauf von Luftbildaufnahmen, usw. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
// + eindeutig als Ursprung verlinkt und genannt werden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
// + Benutzung auf eigene Gefahr |
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
// + mit unserer Zustimmung zulässig |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
// + this list of conditions and the following disclaimer. |
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
// + from this software without specific prior written permission. |
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet |
// + for non-profit use (directly or indirectly) |
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
// + with our written permission |
// + * If sources or documentations are redistributet, our webpage (http://www.MikroKopter.de) must be |
// + clearly linked and named as origin |
// + * porting to systems other than 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/salvo_gps/Basis_v0067g/trunk/README_Gps.txt |
---|
0,0 → 1,83 |
********************************************************************* |
GPS Implementierung von Peter Muehlenbrock ("Salvo") für Mikrokopter/FlightCrtl |
Stand 23.10.2007 |
Verwendung der SW ohne Gewaehr. Siehe auch die Lizenzbedingungen in File Licensce_LPGL.txt und Licensce_GPL.txt |
Die Version basiert auf Holgers V00.64. |
********************************************************************* |
Hardware-Voraussetzungen: |
Kalibrierter Kompass vom Typ CMPS03, waagrecht eingebaut |
GPS Modul vom Typ ublox, Die Meldungungen "NAV_STATUS", "NAV_POSUTM" und "NAV_VELNED" |
mussen mit 4 HZ Updaterate aktiviert sein. Anschluss an RX Port der FlightCRtl. Baudrate ist 57600 wie beim Kopter Tool. |
Software-Voraussetzungen: |
in fc.h müsen die Neutralwerte ACC_NICK_NEUTRAL und ACC_ROLL_NEUTRAL |
eingetragen werden. Hierzu den Kopter waagrecht ausrichten (Wasserwaage) und mit dem Mikrokoptertool |
die Neutralwerte (Fenster ACC Sensor, jeweils die dargestellten Werte ohne Klammern) ermitteln. |
Alternativ kann die Variable ACC_NEUTRAL_FIXED auf 0 gesetzt werden, dann wird die Lage beim Kalibrieren als Neutrallage |
genommen (wie bei Holgers SW). |
In timer0.h muss die Ausrichtung des Kompasses bezogen auf die Nordachse des Kopters |
eingetragen sein. KOMPASS_OFFSET legt diesen Wert fest. |
Hexfiles: |
Ich habe bewußt keinen Hexfile generiert, da die Neutralwerte spezifisch je Kopter sind. |
Die SW muß also individuell compiliert werden und der Hexfile in die FlightCrtl eingebaut werden. |
Der Lohn für die Muehe ist eine sehr driftarme Fluglageregelung sowie eine von der Startausrichtung |
unabhängige waagrechte Lage in der Luft. |
Alle Einstellungen beziehen sich auf AVR Studio von Atmel und den WIN_AVR Compiler. |
Parametrierung: |
Der GPS Hold Regler ist ein PID Regler, der ueber die UserParameter1(P), 2(I) und D(3) gesteuert wird. |
UserParameter1 beschreibt den P-Anteil, UserParameter2 den I-Anteil und UserParameter3 den D-Anteil. |
Hier kann und muss gespielt werden.Alle Parameter koennen direkt im Mikrokoptertool in den Settings eingestellt werden. |
Standardwerte bei kaum Wind sind 8 für den P-Anteil, 1 für den I-Anteil und 12 für den D-Anteil. |
Standardwerte bei leichtem verhältnissen sind 12 für den P-Anteil, 2 für den I-Anteil und 18 für den D-Anteil. |
Standardwerte bei rauheren verhältnissen sind 16 für den P-Anteil, 2 für den I-Anteil und 20 für den D-Anteil. |
Je größer die Werte des "ruckeliger" reagiert die Regelung aber desto schneller und stärker greift sie auch. |
Wenn alle 0 sind, ist der Regler deaktiviert. |
Voraussetzungen für GPS_Hold: |
Neben den genannten HW und SW Voraussetzungen muß beim Kalibrieren das GPS MOdul bereits Positionsdaten liefern. |
Nur dann wird die Home Position abgespeichert und nur dann wird GPS_Hold aktiviert. |
Kenntlich gemacht wird dies durch einen etwas längeren Piepser nach dem Kalibrieren. |
Das GPS Aktiv Flag im Setting muss aktiviert sein. |
Eine Ausrichtung des Kopters nach Nord etc. ist nicht erforderlich. |
Aktivierung GPS_Hold im Flug: |
Wenn alle genannten Voraussetzungen erfüllt sind, wird GPS Hold im Flug automatisch aktiviert, sobald der Nick und Roll Stick |
fürca. 500msec in Neutrallage sind. Weicht einer der Sticks davon ab (Parameter GPS_STICK_HOLDOFF) oder liefert das GPS Modul oder fällt der |
Kompass aus wird GPS_Hold sofort deaktiviert. |
Damit kann jederzeit die manuelle Kontrolle wieder übernommen werden. |
GPS_Hold regelt nur horizontale Abweichungen, keine Hoehe. |
Der Magnetkompass wird nur in waagrechter Lage dazu benutzt einen internen aus dem Giergyro ermittelten "Ersatz"kompasswert |
nach zu kalibrieren. Daher funktioniert die Bstimmung der Kopterausrichtung in jeder Lebenslage, sofern nur ab und zu |
der Magnetkompass in die waagrechte Lage kommt. |
Ein 3D Kompass ist damit überflüssig. |
GPS Rücksturz zur Basis (GPS Home) Funktion |
Voraussetzungen wie bei GPS Hold. |
Die Funktion kann im Flug aktiviert werden durch Setzen des Hoehenreglerschalters. |
Holgers Code habe ich so abgeändert daß der Höhenregler mit "Parameter_MaxHoehe" ab 50 aktiviert wird. |
Mit einem Schalter mit Neutrallage können damit die Funktionen |
Alles aus - Hoehenregler ein, GPS Home Aus - Hoehenregler Ein UND GPS Home ein |
aktiviert werden. Ist noch nicht die beste Lösung und werde ich noch anpassen |
Weitere Änderungen: |
Bei Unterschreiten der eingestellten Warnschwelle für UBAT ertönt zunächst wie gewohnt der Piepser. Geht die Spannung weiter |
runter wird zwangsweise die Gaseinstellung langsam reduziert um den Kopter zum Landen zu bringen |
Bekannte Schwächen: |
Bei längerer Neigung weicht der Ersatzkompass ab, was zu Lageregelungsfehlern bis zum Ausbrechen führen kann. |
/branches/salvo_gps/Basis_v0067g/trunk/Settings.h |
---|
--- salvo_gps/Basis_v0067g/trunk/_Settings.h (nonexistent) |
+++ salvo_gps/Basis_v0067g/trunk/_Settings.h (revision 528) |
@@ -0,0 +1,50 @@ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Testmodi |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define MOTOR_OFF 0 |
+#define MOTOR_TEST 0 |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Abstimmung |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define ACC_AMPLIFY 16 |
+#define FAKTOR_P 1 |
+#define FAKTOR_I 0.0001 |
+ |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Debug-Interface |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define SIO_DEBUG 1 // Soll der Debugger aktiviert sein? |
+#define MIN_DEBUG_INTERVALL 250 // in diesem Intervall werden Debugdaten ohne Aufforderung gesendet |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Sender |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ #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 |
+// +++++++++++++++++++++++++++++++ |
+// + Getestete Settings: |
+// +++++++++++++++++++++++++++++++ |
+// Setting: Kamera |
+// Stick_P:3 |
+// Stick_D:0 |
+// Gyro_P: 175 |
+// Gyro_I: 175 |
+// Ki_Anteil: 10 |
+// +++++++++++++++++++++++++++++++ |
+// + Getestete Settings: |
+// +++++++++++++++++++++++++++++++ |
+// Setting: Normal |
+// Stick_P:2 |
+// Stick_D:8 |
+// Gyro_P: 80 |
+// Gyro_I: 150 |
+// Ki_Anteil: 5 |
+ |
/branches/salvo_gps/Basis_v0067g/trunk/analog.c |
---|
0,0 → 1,173 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100; |
volatile int AccumulateNick = 0, AccumulateRoll = 0, AccumulateGier = 0; |
volatile int accumulate_AccRoll = 0,accumulate_AccNick = 0,accumulate_AccHoch = 0; |
volatile char MessanzahlNick = 0, MessanzahlRoll = 0, MessanzahlGier = 0; |
volatile char messanzahl_AccNick = 0, messanzahl_AccRoll = 0, messanzahl_AccHoch = 0; |
volatile long Luftdruck = 32000; |
volatile int StartLuftdruck; |
volatile unsigned int MessLuftdruck = 1023; |
unsigned char DruckOffsetSetting; |
volatile int HoeheD = 0; |
volatile char messanzahl_Druck; |
volatile int tmpLuftdruck; |
volatile unsigned int ZaehlMessungen = 0; |
//####################################################################################### |
// |
void ADC_Init(void) |
//####################################################################################### |
{ |
ADMUX = 0;//Referenz ist extern |
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE); |
//Free Running Mode, Division Factor 128, Interrupt on |
} |
void SucheLuftruckOffset(void) |
{ |
unsigned int off; |
off = eeprom_read_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET]); |
if(off > 20) off -= 10; |
OCR0A = off; |
Delay_ms(100); |
if(MessLuftdruck < 850) off = 0; |
for(; off < 250;off++) |
{ |
OCR0A = off; |
Delay_ms(50); |
printf("."); |
if(MessLuftdruck < 900) break; |
} |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET], off); |
DruckOffsetSetting = off; |
Delay_ms(300); |
} |
//####################################################################################### |
// |
SIGNAL(SIG_ADC) |
//####################################################################################### |
{ |
static unsigned char kanal=0,state = 0; |
signed int wert; |
ANALOG_OFF; |
switch(state++) |
{ |
case 0: |
wert = (signed int) AdNeutralGier - ADC; |
if(PlatinenVersion != 10) wert *= 2; |
AccumulateGier += wert; // |
MessanzahlGier++; |
Mess_Integral_Gier += wert;// / 16; |
Mess_Integral_Gier2 += wert; |
GyroKomp_Int += wert; |
kanal = 1; |
ZaehlMessungen++; |
break; |
case 1: |
wert = (signed int) ADC - AdNeutralRoll; |
if(PlatinenVersion != 10) wert *= 2; |
Mess_IntegralRoll += wert; |
Mess_IntegralRoll2 += wert; |
if(Mess_IntegralRoll > 310000L) Mess_IntegralRoll = -290000L; |
if(Mess_IntegralRoll <-310000L) Mess_IntegralRoll = 290000L; |
if(ADC < 15) wert = -1000; |
if(ADC < 7) wert = -2000; |
if(ADC > 1010) wert = +1000; |
if(ADC > 1017) wert = +2000; |
AccumulateRoll += wert; |
MessanzahlRoll++; |
kanal = 2; |
break; |
case 2: |
wert = (signed int) ADC - AdNeutralNick; |
if(PlatinenVersion != 10) wert *= 2; |
Mess_IntegralNick += wert; |
Mess_IntegralNick2 += wert; |
if(Mess_IntegralNick > 310000L) Mess_IntegralNick = -290000L; |
if(Mess_IntegralNick <-310000L) Mess_IntegralNick = 290000L; |
if(ADC < 15) wert = -1000; |
if(ADC < 7) wert = -2000; |
if(ADC > 1010) wert = +1000; |
if(ADC > 1017) wert = +2000; |
AccumulateNick += wert; |
MessanzahlNick++; |
kanal = 4; |
break; |
case 3: |
UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2; |
kanal = 6; |
break; |
case 4: |
Aktuell_ay = NeutralAccY - ADC; |
accumulate_AccRoll += Aktuell_ay; |
messanzahl_AccRoll++; |
kanal = 7; |
break; |
case 5: |
Aktuell_ax = ADC - NeutralAccX; |
accumulate_AccNick += Aktuell_ax; |
messanzahl_AccNick++; |
kanal = 5; |
state = 6; |
break; |
case 6: |
accumulate_AccHoch = (signed int) ADC - NeutralAccZ; |
accumulate_AccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4; |
if(accumulate_AccHoch > 1) |
{ |
if(NeutralAccZ < 800) NeutralAccZ+= 0.02; |
} |
else if(accumulate_AccHoch < -1) |
{ |
if(NeutralAccZ > 600) NeutralAccZ-= 0.02; |
} |
messanzahl_AccHoch = 1; |
Aktuell_az = ADC; |
Mess_Integral_Hoch += accumulate_AccHoch; // Integrieren |
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
// Mess_Integral_Hoch -= Mess_Integral_Hoch / 512; // dämfen |
/* if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
kanal = 3; |
state = 7; |
} |
else |
{ |
kanal = 0; |
state = 0; |
}*/ |
kanal = 3; |
state = 7; |
break; |
case 7: |
tmpLuftdruck += ADC; |
if(++messanzahl_Druck >= 5) |
{ |
MessLuftdruck = ADC; |
messanzahl_Druck = 0; |
HoeheD = (int)(StartLuftdruck - tmpLuftdruck - HoehenWert); // D-Anteil = neuerWert - AlterWert |
Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4; |
HoehenWert = StartLuftdruck - Luftdruck; |
tmpLuftdruck = 0; |
} |
kanal = 0; |
state = 0; |
break; |
default: |
kanal = 0; |
state = 0; |
break; |
} |
ADMUX = kanal; |
ANALOG_ON; |
} |
/branches/salvo_gps/Basis_v0067g/trunk/analog.h |
---|
0,0 → 1,23 |
/*####################################################################################### |
#######################################################################################*/ |
extern volatile int UBat; |
extern volatile int AccumulateNick, AccumulateRoll, AccumulateGier,accumulate_AccRoll,accumulate_AccNick,accumulate_AccHoch; |
extern volatile char MessanzahlNick, MessanzahlRoll, MessanzahlGier,messanzahl_AccNick, messanzahl_AccRoll,messanzahl_AccHoch; |
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az; |
extern volatile long Luftdruck; |
extern volatile char messanzahl_Druck; |
extern volatile unsigned int ZaehlMessungen; |
extern unsigned char DruckOffsetSetting; |
extern volatile int HoeheD; |
extern volatile unsigned int MessLuftdruck; |
extern volatile int StartLuftdruck; |
extern unsigned int ReadADC(unsigned char adc_input); |
extern void ADC_Init(void); |
extern void SucheLuftruckOffset(void); |
#define ANALOG_OFF ADCSRA=0 |
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE) |
/branches/salvo_gps/Basis_v0067g/trunk/eeprom.c |
---|
--- salvo_gps/Basis_v0067g/trunk/fc.c (nonexistent) |
+++ salvo_gps/Basis_v0067g/trunk/fc.c (revision 528) |
@@ -0,0 +1,1113 @@ |
+/*####################################################################################### |
+Flight Control |
+#######################################################################################*/ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Copyright (c) 04.2007 Holger Buss |
+// + Nur für den privaten Gebrauch |
+// + www.MikroKopter.com |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
+// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist. |
+// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
+// + bzgl. der Nutzungsbedingungen aufzunehmen. |
+// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
+// + Verkauf von Luftbildaufnahmen, usw. |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
+// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
+// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
+// + eindeutig als Ursprung verlinkt werden |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
+// + Benutzung auf eigene Gefahr |
+// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
+// + mit unserer Zustimmung zulässig |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
+// + this list of conditions and the following disclaimer. |
+// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
+// + from this software without specific prior written permission. |
+// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet |
+// + for non-commercial use (directly or indirectly) |
+// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
+// + with our written permission |
+// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be |
+// + clearly linked as origin |
+// + * porting to systems other than 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. |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Aenderungen von Peter Muehlenbrock ("Salvo") Stand 6.10.2007 |
+/* |
+Driftkompensation fuer Gyros verbessert |
+Linearsensor mit fixem Neutralwert |
+Ersatzkompass abgeleitet aus Magnetkompass und Giergyro fuer nahezu neigungsunabhaengige Kompassfunktion |
+*/ |
+ |
+#include "main.h" |
+ |
+unsigned char h,m,s; |
+volatile unsigned int I2CTimeout = 100; |
+volatile int MesswertNick,MesswertRoll,MesswertGier; |
+volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0; |
+volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0; |
+volatile float NeutralAccZ = 0; |
+unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0; |
+volatile long IntegralNick = 0,IntegralNick2 = 0; |
+volatile long IntegralRoll = 0,IntegralRoll2 = 0; |
+volatile long Integral_Gier = 0; |
+volatile long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0; |
+volatile long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0; |
+volatile long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0; |
+volatile long Mess_Integral_Hoch = 0; |
+volatile int KompassValue = 0; |
+volatile int KompassStartwert = 0; |
+volatile int KompassRichtung = 0; |
+unsigned char MAX_GAS,MIN_GAS; |
+unsigned char Notlandung = 0; |
+unsigned char HoehenReglerAktiv = 0; |
+//Salvo 12.10.2007 |
+uint8_t magkompass_ok=0; |
+uint8_t gps_cmd = GPS_CMD_STOP; |
+static int ubat_cnt =0; |
+static int gas_actual,gas_mittel; //Parameter fuer Gasreduzierung bei unterspannung |
+//Salvo End |
+ |
+ //Salvo 2.9.2007 Ersatzkompass |
+volatile long GyroKomp_Int,GyroKomp_Int2; |
+volatile int GyroKomp_Value; // Der ermittelte Kompasswert aus Gyro und Magnetkompass |
+// Salvo End |
+float GyroFaktor; |
+float IntegralFaktor; |
+ |
+volatile int DiffNick,DiffRoll; |
+int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0; |
+volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count; |
+unsigned char MotorWert[5]; |
+volatile unsigned char SenderOkay = 0; |
+int StickNick = 0,StickRoll = 0,StickGier = 0; |
+char MotorenEin = 0; |
+int HoehenWert = 0; |
+int SollHoehe = 0; |
+unsigned char Looping_Nick = 0,Looping_Roll = 0; |
+ |
+ |
+int w,v; |
+ |
+float Kp = FAKTOR_P; |
+float Ki = FAKTOR_I; |
+ |
+unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
+unsigned char Parameter_MaxHoehe = 251; // 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_Gyro_P = 50; // Wert : 10-250 |
+unsigned char Parameter_Gyro_I = 150; // Wert : 0-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_ServoNickControl = 100; |
+unsigned char Parameter_LoopGasLimit = 70; |
+struct mk_param_struct EE_Parameter; |
+ |
+void Piep(unsigned char Anzahl) |
+{ |
+ while(Anzahl--) |
+ { |
+ if(MotorenEin) return; //auf keinen Fall im Flug! |
+ beeptime = 100; |
+ Delay_ms(250); |
+ } |
+} |
+ |
+//############################################################################ |
+// Nullwerte ermitteln |
+void SetNeutral(void) |
+//############################################################################ |
+{ |
+ unsigned int timer; |
+ NeutralAccX = 0; |
+ NeutralAccY = 0; |
+ NeutralAccZ = 0; |
+ AdNeutralNick = 0; |
+ AdNeutralRoll = 0; |
+ AdNeutralGier = 0; |
+ GPS_Neutral(); |
+ CalibrierMittelwert(); |
+ timer = SetDelay(5); |
+ while (!CheckDelay(timer)); |
+ CalibrierMittelwert(); |
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
+ { |
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
+ } |
+ |
+ if(PlatinenVersion == 10) |
+ { |
+ AdNeutralNick= abs(MesswertNick); |
+ AdNeutralRoll= abs(MesswertRoll); |
+ AdNeutralGier= abs(MesswertGier); |
+ } |
+ else |
+ { |
+ AdNeutralNick= abs(MesswertNick) / 2; |
+ AdNeutralRoll= abs(MesswertRoll) / 2; |
+ AdNeutralGier= abs(MesswertGier) / 2; |
+ } |
+// Salvo 1.9.2007 ACC mit festen neutralwerten ***** |
+ if (ACC_NEUTRAL_FIXED > 0) |
+ { |
+ NeutralAccX = ACC_NICK_NEUTRAL; |
+ NeutralAccY = ACC_ROLL_NEUTRAL; |
+ } |
+ else |
+ { // Automatisch bei Offsetabgleich ermitteln |
+ NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY; |
+ NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY; |
+ } |
+ // Salvo End |
+ NeutralAccZ = Aktuell_az; |
+ |
+ Mess_IntegralNick = 0; |
+ Mess_IntegralNick2 = 0; |
+ Mess_IntegralRoll = 0; |
+ Mess_IntegralRoll2 = 0; |
+ Mess_Integral_Gier = 0; |
+ MesswertNick = 0; |
+ MesswertRoll = 0; |
+ MesswertGier = 0; |
+ StartLuftdruck = Luftdruck; |
+ HoeheD = 0; |
+ Mess_Integral_Hoch = 0; |
+ KompassStartwert = KompassValue; |
+ |
+ beeptime = 50; |
+//Salvo 13.10.2007 Ersatzkompass und Gas |
+ GyroKomp_Int = KompassValue * GYROKOMP_INC_GRAD_DEFAULT; //Neu ab 3.1.2007 |
+ gas_mittel = 30; |
+ gas_actual = gas_mittel; |
+// Salvo End |
+} |
+ |
+//############################################################################ |
+// Bildet den Mittelwert aus den Messwerten |
+void Mittelwert(void) |
+//############################################################################ |
+{ |
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern |
+ ANALOG_OFF; |
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick); |
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll); |
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier); |
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((long)Mittelwert_AccNick * 7 + ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick)) / 8L; |
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 7 + ((ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll)) / 8L; |
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 7 + ((long)accumulate_AccHoch) / messanzahl_AccHoch) / 8L; |
+ AccumulateNick = 0; MessanzahlNick = 0; |
+ AccumulateRoll = 0; MessanzahlRoll = 0; |
+ AccumulateGier = 0; MessanzahlGier = 0; |
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0; |
+ accumulate_AccNick = 0;messanzahl_AccNick = 0; |
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0; |
+ Integral_Gier = Mess_Integral_Gier; |
+// Integral_Gier2 = Mess_Integral_Gier2; |
+ IntegralNick = Mess_IntegralNick; |
+ IntegralRoll = Mess_IntegralRoll; |
+ IntegralNick2 = Mess_IntegralNick2; |
+ IntegralRoll2 = Mess_IntegralRoll2; |
+ // ADC einschalten |
+ ANALOG_ON; |
+ |
+/* |
+//------------------------------------------------------------------------------ |
+ if(MesswertNick > 200) MesswertNick += 4 * (MesswertNick - 200); |
+ else |
+ if(MesswertNick < -200) MesswertNick += 4 * (MesswertNick + 200); |
+ if(MesswertRoll > 200) MesswertRoll += 4 * (MesswertRoll - 200); |
+ else |
+ if(MesswertRoll < -200) MesswertRoll += 4 * (MesswertRoll + 200); |
+//------------------------------------------------------------------------------ |
+*/ |
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--; |
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--; |
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--; |
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--; |
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255; |
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255; |
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255; |
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255; |
+} |
+ |
+//############################################################################ |
+// Messwerte beim Ermitteln der Nullage |
+void CalibrierMittelwert(void) |
+//############################################################################ |
+{ |
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern |
+ ANALOG_OFF; |
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick); |
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll); |
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier); |
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick); |
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = (ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll; |
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)accumulate_AccHoch) / messanzahl_AccHoch; |
+ AccumulateNick = 0; MessanzahlNick = 0; |
+ AccumulateRoll = 0; MessanzahlRoll = 0; |
+ AccumulateGier = 0; MessanzahlGier = 0; |
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0; |
+ accumulate_AccNick = 0;messanzahl_AccNick = 0; |
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0; |
+ // ADC einschalten |
+ ANALOG_ON; |
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--; |
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--; |
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--; |
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--; |
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255; |
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255; |
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255; |
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255; |
+} |
+ |
+//############################################################################ |
+// Senden der Motorwerte per I2C-Bus |
+void SendMotorData(void) |
+//############################################################################ |
+{ |
+ if(MOTOR_OFF || !MotorenEin) |
+ { |
+ Motor_Hinten = 0; |
+ Motor_Vorne = 0; |
+ Motor_Rechts = 0; |
+ Motor_Links = 0; |
+ if(MotorTest[0]) Motor_Vorne = MotorTest[0]; |
+ if(MotorTest[1]) Motor_Hinten = MotorTest[1]; |
+ if(MotorTest[2]) Motor_Links = MotorTest[2]; |
+ if(MotorTest[3]) Motor_Rechts = MotorTest[3]; |
+ } |
+ |
+ DebugOut.Analog[12] = Motor_Vorne; |
+ DebugOut.Analog[13] = Motor_Hinten; |
+ DebugOut.Analog[14] = Motor_Links; |
+ DebugOut.Analog[15] = Motor_Rechts; |
+ |
+ //Start I2C Interrupt Mode |
+ twi_state = 0; |
+ motor = 0; |
+ i2c_start(); |
+} |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Konstanten |
+// + 0-250 -> normale Werte |
+// + 251 -> Poti1 |
+// + 252 -> Poti2 |
+// + 253 -> Poti3 |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+void DefaultKonstanten1(void) |
+{ |
+ EE_Parameter.Kanalbelegung[K_NICK] = 1; |
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
+ EE_Parameter.Kanalbelegung[K_GAS] = 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.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV | CFG_KOMPASS_FIX;//0x01; |
+ EE_Parameter.Hoehe_MinGas = 30; |
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1 |
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32 |
+ EE_Parameter.Luftdruck_D = 50; // Wert : 0-250 |
+ EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250 |
+ EE_Parameter.Hoehe_Verstaerkung = 4; // Wert : 0-50 |
+ EE_Parameter.Stick_P = 2; //2 // Wert : 1-6 |
+ EE_Parameter.Stick_D = 4; //8 // Wert : 0-64 |
+ EE_Parameter.Gier_P = 16; // Wert : 1-20 |
+ EE_Parameter.Gas_Min = 15; // Wert : 0-32 |
+ EE_Parameter.Gas_Max = 250; // Wert : 33-250 |
+ EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64 |
+ EE_Parameter.KompassWirkung = 128; // Wert : 0-250 |
+ EE_Parameter.Gyro_P = 120; //80 // Wert : 0-250 |
+ EE_Parameter.Gyro_I = 150; // Wert : 0-250 |
+ EE_Parameter.UnterspannungsWarnung = 100; // Wert : 0-250 |
+ EE_Parameter.NotGas = 100; // Wert : 0-250 // Gaswert bei Empangsverlust |
+ EE_Parameter.NotGasZeit = 60; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
+ EE_Parameter.UfoAusrichtung = 0; // X oder + Formation |
+ EE_Parameter.I_Faktor = 0; |
+ EE_Parameter.UserParam1 = 8; //zur freien Verwendung |
+ EE_Parameter.UserParam2 = 2; //zur freien Verwendung |
+ EE_Parameter.UserParam3 = 12; //zur freien Verwendung |
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung |
+ EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos |
+ EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo |
+ EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo |
+ EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag |
+ EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag |
+ EE_Parameter.ServoNickRefresh = 5; |
+ EE_Parameter.LoopGasLimit = 50; |
+ EE_Parameter.LoopThreshold = 90; // Wert: 0-250 Schwelle für Stickausschlag |
+ EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
+ memcpy(EE_Parameter.Name, "Sport\0", 12); |
+} |
+ |
+void DefaultKonstanten2(void) |
+{ |
+ EE_Parameter.Kanalbelegung[K_NICK] = 1; |
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
+ EE_Parameter.Kanalbelegung[K_GAS] = 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.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01; |
+ EE_Parameter.Hoehe_MinGas = 30; |
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1 |
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32 |
+ EE_Parameter.Luftdruck_D = 50; // Wert : 0-250 |
+ EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250 |
+ EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50 |
+ EE_Parameter.Stick_P = 2; //2 // Wert : 1-6 |
+ EE_Parameter.Stick_D = 0; //8 // Wert : 0-64 |
+ EE_Parameter.Gier_P = 16; // Wert : 1-20 |
+ EE_Parameter.Gas_Min = 15; // Wert : 0-32 |
+ EE_Parameter.Gas_Max = 250; // Wert : 33-250 |
+ EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64 |
+ EE_Parameter.KompassWirkung = 64; // Wert : 0-250 |
+ EE_Parameter.Gyro_P = 175; //80 // Wert : 0-250 |
+ EE_Parameter.Gyro_I = 175; // Wert : 0-250 |
+ EE_Parameter.UnterspannungsWarnung = 100; // Wert : 0-250 |
+ EE_Parameter.NotGas = 100; // Wert : 0-250 // Gaswert bei Empangsverlust |
+ EE_Parameter.NotGasZeit = 60; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
+ EE_Parameter.UfoAusrichtung = 0; // X oder + Formation |
+ EE_Parameter.I_Faktor = 5; |
+ EE_Parameter.UserParam1 = 12; //zur freien Verwendung |
+ EE_Parameter.UserParam2 = 2; //zur freien Verwendung |
+ EE_Parameter.UserParam3 = 16; //zur freien Verwendung |
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung |
+ EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos |
+ EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo |
+ EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo |
+ EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag |
+ EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag |
+ EE_Parameter.ServoNickRefresh = 5; |
+ EE_Parameter.LoopGasLimit = 50; |
+ EE_Parameter.LoopThreshold = 90; // Wert: 0-250 Schwelle für Stickausschlag |
+ EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts |
+ memcpy(EE_Parameter.Name, "Kamera\0", 12); |
+} |
+ |
+ |
+//############################################################################ |
+// Trägt ggf. das Poti als Parameter ein |
+void ParameterZuordnung(void) |
+//############################################################################ |
+{ |
+ |
+ #define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;} |
+ CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255); |
+ CHK_POTI(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100); |
+ CHK_POTI(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100); |
+ CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255); |
+ CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255); |
+ CHK_POTI(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255); |
+ CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255); |
+ CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255); |
+ CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255); |
+ CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255); |
+ CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3,0,255); |
+ CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4,0,255); |
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255); |
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255); |
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255); |
+ CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit,0,255); |
+ |
+ Ki = (float) Parameter_I_Faktor * 0.0001; |
+ MAX_GAS = EE_Parameter.Gas_Max; |
+ MIN_GAS = EE_Parameter.Gas_Min; |
+} |
+ |
+ |
+//############################################################################ |
+// |
+void MotorRegler(void) |
+//############################################################################ |
+{ |
+ int motorwert,pd_ergebnis,h,tmp_int; |
+ int GierMischanteil,GasMischanteil; |
+ static long SummeNick=0,SummeRoll=0; |
+ static long sollGier = 0,tmp_long,tmp_long2; |
+ long IntegralFehlerNick = 0; |
+ long IntegralFehlerRoll = 0; |
+ static unsigned int RcLostTimer; |
+ static unsigned char delay_neutral = 0; |
+ static unsigned char delay_einschalten = 0,delay_ausschalten = 0; |
+ static unsigned int modell_fliegt = 0; |
+ static int hoehenregler = 0; |
+ static char TimerWerteausgabe = 0; |
+ static char NeueKompassRichtungMerken = 0; |
+ Mittelwert(); |
+//****** GPS Daten holen *************** |
+ short int n; |
+ if (gps_alive_cnt > 0) gps_alive_cnt--; //Dekrementieren. Wenn 0 kommen keine ausreichenden GPS Meldungen (Timeout) |
+ n = Get_Rel_Position(); |
+ if (n == 0) |
+ { |
+ ROT_ON; //led blitzen lassen |
+ } |
+//******PROVISORISCH*************** |
+ GRN_ON; |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gaswert ermitteln |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
+//Salvo 13.10.2007 langsame Gasreduktion bei Unterspannung. Als Ausgangswert wird der bei UBAT=k gemessen Mittelwert genommen |
+// und dieser dann langsam zwangsweise reduziert |
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern |
+ if (UBat <= EE_Parameter.UnterspannungsWarnung - 2) //Unterhalb der Piepser Schwelle aktivieren |
+ { |
+ if (ubat_cnt > 700) |
+ { |
+ ubat_cnt = 0; |
+ if (gas_actual > ((gas_mittel*12)/15)) gas_actual--; |
+ } |
+ else ubat_cnt++; |
+ if (GasMischanteil > gas_actual) GasMischanteil = gas_actual; |
+ } |
+ else //Falls UBAT wieder ok ist |
+ { |
+ if (ubat_cnt > 1000) |
+ { |
+ gas_mittel = ((gas_mittel*9) + GasMischanteil)/10; //Filtern |
+ gas_actual = GasMischanteil; |
+ } |
+ else |
+ { |
+ ubat_cnt++; |
+ if ((ubat_cnt % 10) == 0) |
+ { |
+ if (gas_actual < GasMischanteil) gas_actual++; |
+ else gas_actual = GasMischanteil; |
+ } |
+ } |
+ GasMischanteil = gas_actual; |
+ } |
+ ANALOG_ON; // ADC einschalten |
+// Salvo End |
+ if(GasMischanteil < 0) GasMischanteil = 0; |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Empfang schlecht |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(SenderOkay < 100) |
+ { |
+ if(!PcZugriff) |
+ { |
+ if(BeepMuster == 0xffff) |
+ { |
+ beeptime = 15000; |
+ BeepMuster = 0x0c00; |
+ } |
+ } |
+ if(RcLostTimer) RcLostTimer--; |
+ else |
+ { |
+ MotorenEin = 0; |
+ Notlandung = 0; |
+ } |
+ ROT_ON; |
+ if(modell_fliegt > 2000) // wahrscheinlich in der Luft --> langsam absenken |
+ { |
+ GasMischanteil = EE_Parameter.NotGas; |
+ Notlandung = 1; |
+ 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) |
+ { |
+ Notlandung = 0; |
+ RcLostTimer = EE_Parameter.NotGasZeit * 50; |
+ if(GasMischanteil > 40) |
+ { |
+ if(modell_fliegt < 0xffff) modell_fliegt++; |
+ } |
+ if((modell_fliegt < 200) || (GasMischanteil < 40)) |
+ { |
+ SummeNick = 0; |
+ SummeRoll = 0; |
+ Mess_Integral_Gier = 0; |
+ Mess_Integral_Gier2 = 0; |
+ } |
+ if((GasMischanteil > 200) && MotorenEin == 0) |
+ { |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// auf Nullwerte kalibrieren |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte |
+ { |
+ unsigned char setting; |
+ if(++delay_neutral > 200) // nicht sofort |
+ { |
+ GRN_OFF; |
+ SetNeutral(); |
+ MotorenEin = 0; |
+ delay_neutral = 0; |
+ modell_fliegt = 0; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70) |
+ { |
+ 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; |
+ eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting); // aktiven Datensatz merken |
+ } |
+ |
+ |
+ |
+ |
+ ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
+ |
+ Piep(GetActiveParamSetNumber()); |
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
+ { |
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
+ } |
+ GPS_Save_Home(); //Daten sind jetzt hoffentlich verfuegbar |
+ if (gps_home_position.status > 0 ) |
+ { |
+ Delay_ms(1000); //akustisch verkuenden dass GPS Home Daten da sind |
+ beeptime = 2000; |
+ Delay_ms(500); |
+ } |
+ } |
+ } |
+ else delay_neutral = 0; |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gas ist unten |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(GasMischanteil < 35) |
+ { |
+ // Starten |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) |
+ { |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Einschalten |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(++delay_einschalten > 200) |
+ { |
+ delay_einschalten = 200; |
+ modell_fliegt = 1; |
+ MotorenEin = 1; |
+ sollGier = 0; |
+ Mess_Integral_Gier = 0; |
+ Mess_Integral_Gier2 = 0; |
+ Mess_IntegralNick = 0; |
+ Mess_IntegralRoll = 0; |
+ Mess_IntegralNick2 = IntegralNick; |
+ Mess_IntegralRoll2 = IntegralRoll; |
+ SummeNick = 0; |
+ SummeRoll = 0; |
+ } |
+ } |
+ else delay_einschalten = 0; |
+ //Auf Neutralwerte setzen |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Auschalten |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) |
+ { |
+ if(++delay_ausschalten > 200) // nicht sofort |
+ { |
+ MotorenEin = 0; |
+ delay_ausschalten = 200; |
+ modell_fliegt = 0; |
+ } |
+ } |
+ else delay_ausschalten = 0; |
+ } |
+ } |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// neue Werte von der Funke |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(!NewPpmData-- || Notlandung) |
+ { |
+ ParameterZuordnung(); |
+ StickNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P; |
+ StickNick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
+ StickRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P; |
+ StickRoll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
+ StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; |
+ GyroFaktor = ((float)Parameter_Gyro_P + 10.0) / 256.0; |
+ IntegralFaktor = ((float) Parameter_Gyro_I) / 44000; |
+ |
+ if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0; |
+ if(GyroFaktor < 0) GyroFaktor = 0; |
+ if(IntegralFaktor < 0) IntegralFaktor = 0; |
+ // greift in den Stick ein, um ungewolltes überschlagen zu verhindern |
+ if(!(EE_Parameter.LoopConfig & CFG_LOOP_LINKS) && !(EE_Parameter.LoopConfig & CFG_LOOP_RECHTS)) |
+ { |
+ if(IntegralNick > 60000) |
+ { |
+ StickNick -= 8 * EE_Parameter.Stick_P; |
+ if(IntegralNick > 80000) StickNick -= 16 * EE_Parameter.Stick_P; |
+ } |
+ else |
+ if(IntegralNick < -60000) |
+ { |
+ StickNick += 8 * EE_Parameter.Stick_P; |
+ if(IntegralNick > 80000) StickNick -= 16 * EE_Parameter.Stick_P; |
+ } |
+ if(IntegralRoll > 60000) |
+ { |
+ StickRoll -= 8 * EE_Parameter.Stick_P; |
+ if(IntegralRoll > 80000) StickRoll -= 16 * EE_Parameter.Stick_P; |
+ } |
+ else |
+ if(IntegralRoll < -60000) |
+ { |
+ StickRoll += 8 * EE_Parameter.Stick_P; |
+ if(IntegralRoll > 80000) StickRoll -= 16 * EE_Parameter.Stick_P; |
+ } |
+ } |
+ |
+ } |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Looping? |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_LINKS) || |
+ ((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < -EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_RECHTS)) |
+ { |
+ Looping_Roll = 1; |
+ if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit; |
+ } |
+ else Looping_Roll = 0; |
+ |
+ if(((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_OBEN) || |
+ ((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_UNTEN)) |
+ { |
+ Looping_Nick = 1; |
+ Looping_Roll = 0; |
+ if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit; |
+ } |
+ else Looping_Nick = 0; |
+ |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Bei Empfangsausfall im Flug |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(Notlandung) |
+ { |
+ StickGier = 0; |
+ StickNick = 0; |
+ StickRoll = 0; |
+ GyroFaktor = 0.1; |
+ IntegralFaktor = 0.005; |
+ Looping_Roll = 0; |
+ Looping_Nick = 0; |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gyro-Drift kompensieren |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define DRIFT_FAKTOR 3 |
+ if(ZaehlMessungen >= 1000 / DRIFT_FAKTOR) |
+ { |
+ IntegralFehlerNick = IntegralNick2 - IntegralNick; |
+ IntegralFehlerRoll = IntegralRoll2 - IntegralRoll; |
+ ZaehlMessungen = 0; |
+ if(IntegralFehlerNick > 500/DRIFT_FAKTOR) AdNeutralNick++; |
+ if(IntegralFehlerNick < -500/DRIFT_FAKTOR) AdNeutralNick--; |
+ if(IntegralFehlerRoll > 500/DRIFT_FAKTOR) AdNeutralRoll++; |
+ if(IntegralFehlerRoll < -500/DRIFT_FAKTOR) AdNeutralRoll--; |
+ |
+ |
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern |
+ Mess_IntegralNick2 = IntegralNick; |
+ Mess_IntegralRoll2 = IntegralRoll; |
+ Mess_Integral_Gier2 = Integral_Gier; |
+ |
+//Salvo Ersatzkompass Ueberlauf korrigieren |
+ if (GyroKomp_Int >= ((long)360 * GYROKOMP_INC_GRAD_DEFAULT)) GyroKomp_Int = GyroKomp_Int - (GYROKOMP_INC_GRAD_DEFAULT *(long)360); //neu ab 3.11.2007 |
+ if (GyroKomp_Int < 0) GyroKomp_Int = GyroKomp_Int + (GYROKOMP_INC_GRAD_DEFAULT *(long)360); //neu ab 3.11.2007 |
+ ANALOG_ON; // ADC einschalten |
+ ROT_OFF; |
+// Salvo End |
+ |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Integrale auf ACC-Signal abgleichen |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(IntegralFaktor && !Looping_Nick && !Looping_Roll) |
+ { |
+ tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick); |
+ if(labs(Mittelwert_AccNick) < 200) tmp_long /= 8; |
+ else tmp_long /= 16; |
+ tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll); |
+ if(labs(Mittelwert_AccRoll) < 200) tmp_long2 /= 8; |
+ else tmp_long2 /= 16; |
+ |
+ #define AUSGLEICH 500 |
+ 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; |
+ } |
+ else |
+ { |
+ tmp_long = 0; |
+ tmp_long2 = 0; |
+ } |
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern |
+ // Salvo 1.9.2007 Volle Korrektur nur wenn waagrechte Lage, sonst abgeschawecht ***************** |
+ |
+ w = (abs(Mittelwert_AccNick)); |
+ v = (abs(Mittelwert_AccRoll)); |
+ if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) |
+ { |
+ Mess_IntegralNick -= tmp_long; |
+ Mess_IntegralRoll -= tmp_long2; |
+ } |
+ else if ((w < 2 * ACC_WAAGRECHT_LIMIT) && (v < 2 * ACC_WAAGRECHT_LIMIT)) |
+ { |
+ Mess_IntegralNick -= tmp_long/2; //Vorher 8 |
+ Mess_IntegralRoll -= tmp_long2/2; |
+ } |
+ else if ((w < 4 * ACC_WAAGRECHT_LIMIT) && (v < 4 * ACC_WAAGRECHT_LIMIT)) |
+ { |
+ Mess_IntegralNick -= tmp_long/4; |
+ Mess_IntegralRoll -= tmp_long2/4; |
+ } |
+ else |
+ { |
+ Mess_IntegralNick -= tmp_long/8; |
+ Mess_IntegralRoll -= tmp_long2/8; |
+ } |
+// Salvo End *********************** |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gieren |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(abs(StickGier) > 20) // war 35 |
+ { |
+ if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1; |
+ } |
+ tmp_int = EE_Parameter.Gier_P * (StickGier * abs(StickGier)) / 512; // expo y = ax + bx² |
+ tmp_int += (EE_Parameter.Gier_P * StickGier) / 4; |
+ sollGier = tmp_int; |
+ Mess_Integral_Gier -= tmp_int; |
+ if(Mess_Integral_Gier > 25000) Mess_Integral_Gier = 25000; // begrenzen |
+ if(Mess_Integral_Gier <-25000) Mess_Integral_Gier =-25000; |
+ |
+ // Salvo Gewolltes Gieren ignorieren 30.8.2007 ********************** |
+ Mess_Integral_Gier2 -= tmp_int; |
+// Salvo End ************************* |
+ ANALOG_ON; // ADC einschalten |
+ |
+// Salvo Ersatzkompass 26.9.2007 ********************** |
+ if ((Kompass_Neuer_Wert > 0)) |
+ { |
+ Kompass_Neuer_Wert = 0; |
+ w = (abs(Mittelwert_AccNick)); |
+ v = (abs(Mittelwert_AccRoll)); |
+ if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) //Ersatzkompass nur mit Magnetkompass aktualisieren wenn alles ok |
+ { |
+ if ((abs(KompassValue - Kompass_Value_Old)) <= 5) // Aufeinanderfolgende Werte duerfen nur minimal abweichen |
+ { |
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern |
+ magkompass_ok = 1; // Flag dass Magnetkompass stabil arbeitet |
+ GyroKomp_Int = (GyroKomp_Int )/GYROKOMP_INC_GRAD_DEFAULT; |
+ w = KompassValue - GyroKomp_Int; |
+ if ((w > 0) && (w < 180)) |
+ { |
+ ++GyroKomp_Int; |
+ } |
+ else if ((w > 0) && (w >= 180)) |
+ { |
+ --GyroKomp_Int; |
+ } |
+ else if ((w < 0) && (w >= -180)) |
+ { |
+ --GyroKomp_Int; |
+ } |
+ else if ((w < 0) && (w < -180)) |
+ { |
+ ++GyroKomp_Int; |
+ } |
+ if (GyroKomp_Int < 0) GyroKomp_Int = GyroKomp_Int + 360; |
+ GyroKomp_Int = (GyroKomp_Int%360) * GYROKOMP_INC_GRAD_DEFAULT; // An Magnetkompasswert annaehern |
+ ANALOG_ON; // ADC einschalten |
+ } |
+ } |
+ else magkompass_ok = 0; |
+ } |
+// Salvo End ************************* |
+ |
+// Salvo 6.10.2007 |
+ // GPS Home aktivieren wenn Knueppel in Ruhelage und Hoehenschalter aktiviert ist |
+ //GPS Hold Aktiveren wenn Knueppel in Ruhelage sind |
+ if ((EE_Parameter.GlobalConfig & CFG_GPS_AKTIV) && (abs(StickRoll) < GPS_STICK_HOLDOFF) && (abs(StickNick) < GPS_STICK_HOLDOFF) && (gps_alive_cnt > 0)) |
+ { |
+ if (Parameter_MaxHoehe > 200) |
+ { |
+ if ( gps_cmd == GPS_CMD_REQ_HOLD) gps_cmd = GPS_CMD_STOP; // erst mal stoppen, denn altes Kommando wurde noch nicht beendet |
+ else gps_cmd = GPS_CMD_REQ_HOME; |
+ n = GPS_CRTL(gps_cmd); |
+ } |
+ else |
+ { |
+ if ( gps_cmd == GPS_CMD_REQ_HOME) gps_cmd = GPS_CMD_STOP; // erst mal stoppen, denn altes Kommando wurde noch nicht beendet |
+ else gps_cmd = GPS_CMD_REQ_HOLD; |
+ n= GPS_CRTL(gps_cmd); |
+ } |
+ } |
+ else (n= GPS_CRTL(GPS_CMD_STOP)); //GPS Lageregelung beenden |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Kompass |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) && (Kompass_present > 0)) |
+ { |
+ if(v > w) w = v; // grösste Neigung ermitteln |
+ |
+// Salvo 13.9.2007 Nur wenn Magnetkompass ordentliche Werte liefert |
+ if ((magkompass_ok > 0) && NeueKompassRichtungMerken) |
+ { |
+ KompassStartwert = KompassValue; |
+ NeueKompassRichtungMerken = 0; |
+ } |
+// Salvo 13.9.2007 |
+ w=0; |
+// Salvo End |
+ w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren |
+ w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln |
+ if(w > 0) |
+ { |
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern |
+ |
+// Salvo Kompasssteuerung ********************** |
+ if (magkompass_ok > 0) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten |
+// Salvo End |
+ ANALOG_ON; // ADC einschalten |
+ } |
+ |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Debugwerte zuordnen |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(!TimerWerteausgabe--) |
+ { |
+ TimerWerteausgabe = 49; |
+ DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor; |
+ DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor; |
+ DebugOut.Analog[2] = Mittelwert_AccNick; |
+ DebugOut.Analog[3] = Mittelwert_AccRoll; |
+ DebugOut.Analog[4] = MesswertGier; |
+ DebugOut.Analog[5] = HoehenWert; |
+ DebugOut.Analog[6] = (Mess_Integral_Hoch / 512); |
+ DebugOut.Analog[8] = KompassValue; |
+ DebugOut.Analog[9] = GyroKomp_Int/GYROKOMP_INC_GRAD_DEFAULT; |
+ |
+// Diverse parameter Debugging |
+ DebugOut.Analog[16] = dataset_cnt; |
+ DebugOut.Analog[17] = UBat; |
+ DebugOut.Analog[18] = MesswertNick; |
+ DebugOut.Analog[19] = MesswertRoll; |
+ DebugOut.Analog[20] = MesswertGier; |
+ DebugOut.Analog[21] = StickNick; |
+ DebugOut.Analog[22] = StickRoll; |
+ DebugOut.Analog[23] = StickGier; |
+ |
+ |
+// GPS Debugging |
+ DebugOut.Analog[26] = gps_rel_act_position.utm_east; |
+ DebugOut.Analog[27] = gps_rel_act_position.utm_north; |
+ DebugOut.Analog[28] = gps_rel_act_position.utm_alt; |
+ DebugOut.Analog[29] = gps_sub_state+(20*gps_cmd); |
+ |
+/* DebugOut.Analog[16] = motor_rx[0]; |
+ DebugOut.Analog[17] = motor_rx[1]; |
+ DebugOut.Analog[18] = motor_rx[2]; |
+ DebugOut.Analog[19] = motor_rx[3]; |
+ DebugOut.Analog[20] = motor_rx[0] + motor_rx[1] + motor_rx[2] + motor_rx[3]; |
+ DebugOut.Analog[20] /= 14; |
+ DebugOut.Analog[21] = motor_rx[4]; |
+ DebugOut.Analog[22] = motor_rx[5]; |
+ DebugOut.Analog[23] = motor_rx[6]; |
+ DebugOut.Analog[24] = motor_rx[7]; |
+ DebugOut.Analog[25] = motor_rx[4] + motor_rx[5] + motor_rx[6] + motor_rx[7]; |
+*/ |
+// DebugOut.Analog[9] = MesswertNick; |
+// DebugOut.Analog[9] = SollHoehe; |
+// DebugOut.Analog[10] = Mess_Integral_Gier / 128; |
+// DebugOut.Analog[11] = KompassStartwert; |
+// DebugOut.Analog[10] = Parameter_Gyro_I; |
+// DebugOut.Analog[10] = EE_Parameter.Gyro_I; |
+// DebugOut.Analog[9] = KompassRichtung; |
+// DebugOut.Analog[10] = GasMischanteil; |
+// DebugOut.Analog[3] = HoeheD * 32; |
+// DebugOut.Analog[4] = hoehenregler; |
+ } |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(Looping_Nick) MesswertNick = MesswertNick * GyroFaktor; |
+ else MesswertNick = IntegralNick * IntegralFaktor + MesswertNick * GyroFaktor; |
+ if(Looping_Roll) MesswertRoll = MesswertRoll * GyroFaktor; |
+ else MesswertRoll = IntegralRoll * IntegralFaktor + MesswertRoll * GyroFaktor; |
+// MesswertGier = MesswertGier * (GyroFaktor/2) + Integral_Gier * IntegralFaktor; |
+ MesswertGier = MesswertGier * (GyroFaktor) + Integral_Gier * IntegralFaktor/2; |
+ |
+ // Maximalwerte abfangen |
+ #define MAX_SENSOR 2048 |
+ 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; |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Höhenregelung |
+// Die Höhenregelung schwächt lediglich das Gas ab, erhöht es allerdings nicht |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+//OCR0B = 180 - (Poti1 + 120) / 4; |
+//DruckOffsetSetting = OCR0B; |
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung |
+ { |
+ int tmp_int; |
+ if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
+ { |
+ if(Parameter_MaxHoehe < 50) |
+ { |
+ SollHoehe = HoehenWert - 20; // Parameter_MaxHoehe ist der PPM-Wert des Schalters |
+ HoehenReglerAktiv = 0; |
+ } |
+ else |
+ HoehenReglerAktiv = 1; |
+ } |
+ else |
+ { |
+ SollHoehe = Parameter_MaxHoehe * EE_Parameter.Hoehe_Verstaerkung - 20; |
+ HoehenReglerAktiv = 1; |
+ } |
+ |
+ if(Notlandung) SollHoehe = 0; |
+ h = HoehenWert; |
+ if((h > SollHoehe) && HoehenReglerAktiv) // zu hoch --> drosseln |
+ { h = ((h - SollHoehe) * (int) Parameter_Hoehe_P) / 16; // Differenz bestimmen --> P-Anteil |
+ h = GasMischanteil - h; // vom Gas abziehen |
+ h -= (HoeheD * Parameter_Luftdruck_D)/8; // D-Anteil |
+ tmp_int = ((Mess_Integral_Hoch / 512) * (signed long) Parameter_Hoehe_ACC_Wirkung) / 32; |
+ if(tmp_int > 50) tmp_int = 50; |
+ else if(tmp_int < -50) tmp_int = -50; |
+ h -= tmp_int; |
+ hoehenregler = (hoehenregler*15 + h) / 16; |
+ if(hoehenregler < EE_Parameter.Hoehe_MinGas) // nicht unter MIN |
+ { |
+ if(GasMischanteil >= EE_Parameter.Hoehe_MinGas) hoehenregler = EE_Parameter.Hoehe_MinGas; |
+ if(GasMischanteil < EE_Parameter.Hoehe_MinGas) hoehenregler = GasMischanteil; |
+ } |
+ if(hoehenregler > GasMischanteil) hoehenregler = GasMischanteil; // nicht mehr als Gas |
+ GasMischanteil = hoehenregler; |
+ } |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Mischer und PI-Regler |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ DebugOut.Analog[7] = GasMischanteil; |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gier-Anteil |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define MUL_G 1.0 |
+ GierMischanteil = MesswertGier - sollGier; // Regler für Gier |
+//GierMischanteil = 0; |
+ if(GierMischanteil > (MUL_G * GasMischanteil)) GierMischanteil = MUL_G * GasMischanteil; |
+ if(GierMischanteil < -(MUL_G * GasMischanteil)) GierMischanteil = -(MUL_G * GasMischanteil); |
+ if(GierMischanteil > 100) GierMischanteil = 100; |
+ if(GierMischanteil < -100) GierMischanteil = -100; |
+ |
+ if(GasMischanteil < 20) GierMischanteil = 0; |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Nick-Achse |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+ DiffNick = Kp * (MesswertNick - (StickNick - GPS_Nick)); // Differenz bestimmen |
+ SummeNick += DiffNick; // I-Anteil |
+ if(SummeNick > 0) SummeNick-= (abs(SummeNick)/256 + 1); else SummeNick += abs(SummeNick)/256 + 1; |
+ if(SummeNick > 16000) SummeNick = 16000; |
+ if(SummeNick < -16000) SummeNick = -16000; |
+ pd_ergebnis = DiffNick;// + Ki * SummeNick; // PI-Regler für Nick |
+ // Motor Vorn |
+#define MUL 2 |
+ if(pd_ergebnis > MUL * (GasMischanteil + abs(GierMischanteil))) pd_ergebnis = MUL * (GasMischanteil + abs(GierMischanteil)); |
+ if(pd_ergebnis < -MUL * (GasMischanteil + abs(GierMischanteil))) pd_ergebnis = -MUL * (GasMischanteil + abs(GierMischanteil)); |
+ |
+ motorwert = GasMischanteil + pd_ergebnis + GierMischanteil; // Mischer |
+ if ((motorwert < 0)) motorwert = 0; |
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
+ Motor_Vorne = motorwert; |
+ // Motor Heck |
+ motorwert = GasMischanteil - pd_ergebnis + GierMischanteil; |
+ if ((motorwert < 0)) motorwert = 0; |
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
+ Motor_Hinten = motorwert; |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Roll-Achse |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ DiffRoll = Kp * (MesswertRoll - (StickRoll - GPS_Roll)); // Differenz bestimmen |
+ SummeRoll += DiffRoll; // I-Anteil |
+ if(SummeRoll > 0) SummeRoll-= (abs(SummeRoll)/256 + 1); else SummeRoll += abs(SummeRoll)/256 + 1; |
+ if(SummeRoll > 16000) SummeRoll = 16000; |
+ if(SummeRoll < -16000) SummeRoll = -16000; |
+ pd_ergebnis = DiffRoll;// + Ki * SummeRoll; // PI-Regler für Roll |
+ if(pd_ergebnis > MUL * (GasMischanteil + abs(GierMischanteil))) pd_ergebnis = MUL * (GasMischanteil + abs(GierMischanteil)); |
+ if(pd_ergebnis < -MUL * (GasMischanteil + abs(GierMischanteil))) pd_ergebnis = -MUL * (GasMischanteil + abs(GierMischanteil)); |
+ // Motor Links |
+ motorwert = GasMischanteil + pd_ergebnis - GierMischanteil; |
+ if ((motorwert < 0)) motorwert = 0; |
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
+ Motor_Links = motorwert; |
+ // Motor Rechts |
+ motorwert = GasMischanteil - pd_ergebnis - GierMischanteil; |
+ if ((motorwert < 0)) motorwert = 0; |
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
+ Motor_Rechts = motorwert; |
+ // +++++++++++++++++++++++++++++++++++++++++++++++ |
+} |
+ |
/branches/salvo_gps/Basis_v0067g/trunk/fc.h |
---|
0,0 → 1,142 |
/*####################################################################################### |
Flight Control |
#######################################################################################*/ |
#ifndef _FC_H |
#define _FC_H |
extern volatile unsigned int I2CTimeout; |
//Salvo 1.9.2007 Neutralwerte fuer ACC Sensor fest einstellen. Startausrichtung ist dann egal ! ***** |
// Laut Datenblatt sind die Werte ueber Zeit und Temperatur sehr stabil. |
#define ACC_NEUTRAL_FIXED 1 // wenn eins werden die Neutralwerte fuer den ACC Sensor festeingestellt |
#define ACC_NICK_NEUTRAL 518 // ADC Wandler Wert in Neutrallage (0g): Vom individuellen Sensor abhaengig |
#define ACC_ROLL_NEUTRAL 516 // ADC Wandler wert in Neutrallage (0g) |
#define ACC_WAAGRECHT_LIMIT 100 // Nick und Roll kleiner als dieser Wert gelten als Kriterium fuer waagrechte Lage |
// Salvo End |
//Salvo 2.9.2007 Ersatzkompass: Gyroincrements/Grad als Defaultwert ***** |
// Laut Datenblatt sind die Werte ueber Zeit und Temperatur sehr stabil. |
#define GYROKOMP_INC_GRAD_DEFAULT 1250 // Gyroincrements/Grad als Defaultwert |
// Salvo End |
extern unsigned char Parameter_UserParam1 ; |
extern unsigned char Parameter_UserParam2 ; |
extern unsigned char Parameter_UserParam3 ; |
// Salvo End |
extern volatile unsigned char Timeout; |
extern unsigned char Sekunde,Minute; |
extern volatile long IntegralNick,IntegralNick2; |
extern volatile long IntegralRoll,IntegralRoll2; |
extern volatile long Mess_IntegralNick,Mess_IntegralNick2; |
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2; |
extern volatile long Mess_Integral_Hoch; |
extern volatile long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2; |
extern volatile int KompassValue; |
extern volatile int KompassStartwert; |
extern volatile int KompassRichtung; |
extern int HoehenWert; |
extern int SollHoehe; |
extern volatile int MesswertNick,MesswertRoll,MesswertGier; |
extern volatile int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll; |
extern volatile int NeutralAccX, NeutralAccY,Mittelwert_AccHoch; |
extern volatile float NeutralAccZ; |
//Salvo 2.9.2007 Ersatzkompass |
extern volatile long GyroKomp_Int; |
extern volatile int GyroKomp_Inc_Grad; |
extern volatile int GyroKomp_Value; // Der ermittelte Kompasswert aus Gyro und Magnetkompass |
// Salvo End |
void MotorRegler(void); |
void SendMotorData(void); |
void CalibrierMittelwert(void); |
void Mittelwert(void); |
void SetNeutral(void); |
unsigned char h,m,s; |
volatile unsigned char Timeout ; |
unsigned char CosinusNickWinkel, CosinusRollWinkel; |
volatile long IntegralNick,IntegralNick2; |
volatile long IntegralRoll,IntegralRoll2; |
volatile long Integral_Gier; |
volatile long Mess_IntegralNick,Mess_IntegralNick2; |
volatile long Mess_IntegralRoll,Mess_IntegralRoll2; |
volatile long Mess_Integral_Gier; |
volatile int DiffNick,DiffRoll; |
extern int Poti1, Poti2, Poti3, Poti4; |
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count; |
unsigned char MotorWert[5]; |
volatile unsigned char SenderOkay; |
int StickNick,StickRoll,StickGier; |
char MotorenEin; |
extern void DefaultKonstanten(void); |
#define STRUCT_PARAM_LAENGE 58 |
struct mk_param_struct |
{ |
unsigned char Kanalbelegung[8]; // 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 MaxHoehe; // 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 Stick_P; // Wert : 1-6 |
unsigned char Stick_D; // Wert : 0-64 |
unsigned char Gier_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 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 UfoAusrichtung; // X oder + Formation |
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 |
unsigned char ServoNickRefresh; // |
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping |
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag |
//------------------------------------------------ |
unsigned char LoopConfig; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
unsigned char ServoNickCompInvert; // Wert : 0-250 0 oder 1 // WICHTIG!!! am Ende lassen |
unsigned char Reserved[4]; |
char Name[12]; |
}; |
/* |
unsigned char ServoNickMax; // Wert : 0-250 |
unsigned char ServoNickRefresh; // |
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping |
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag |
//------------------------------------------------ |
unsigned char LoopConfig; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
unsigned char ServoNickCompInvert; // Wert : 0-250 0 oder 1 // WICHTIG!!! am Ende lassen |
unsigned char Reserved[4]; |
char Name[12]; |
*/ |
extern struct mk_param_struct EE_Parameter; |
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; |
#endif //_FC_H |
/branches/salvo_gps/Basis_v0067g/trunk/flight.pnproj |
---|
0,0 → 1,0 |
<Project name="Flight-Ctrl"><File path="uart.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="printf_P.c"></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="fc.c"></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></Project> |
/branches/salvo_gps/Basis_v0067g/trunk/flight.pnps |
---|
0,0 → 1,0 |
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd> |
/branches/salvo_gps/Basis_v0067g/trunk/flight_ctrl.aps |
---|
0,0 → 1,0 |
<AVRStudio><MANAGEMENT><ProjectName>flight_ctrl</ProjectName><Created>28-Aug-2007 19:41:41</Created><LastEdit>04-Oct-2007 17:09:00</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>28-Aug-2007 19:41:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>flight_ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>G:\Mikrokopter\Flight_Crtl\svn\work\</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><modules><module></module></modules><Triggers><trigger clsid="{11A8571C-BF39-4FA7-8642-286DD19644B8}" enabled="1" variable="{"GPS.c", 44} ptr_position" condition="0" access="0" value1="0" value2="0" elements="1" hitcount="1" continue="0" customType="0" customScope="0"/></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><SOURCEFILE>math.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><HEADERFILE>math.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>0</LIST><MAP>0</MAP><OUTPUTFILENAME>flight_ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>0</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>math.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/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -O0 -fsigned-char</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Programme\WinAVR-20070525\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Programme\WinAVR-20070525\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>G:\Mikrokopter\Flight_Crtl\svn\work\uart.h</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\_Settings.h</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\analog.h</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\fc.h</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\gps.h</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\main.h</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\menu.h</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\old_macros.h</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\printf_P.h</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\rc.h</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\Settings.h</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\timer0.h</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\twimaster.h</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\math.h</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\main.c</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\uart.c</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\analog.c</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\eeprom.c</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\fc.c</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\GPS.c</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\menu.c</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\printf_P.c</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\rc.c</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\timer0.c</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\twimaster.c</Name><Name>G:\Mikrokopter\Flight_Crtl\svn\work\math.c</Name></Files></ProjectFiles><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>gps.h</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>fc.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>GPS.c</FileName><Status>1</Status></File00002></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio> |
/branches/salvo_gps/Basis_v0067g/trunk/flight_ctrl.aws |
---|
0,0 → 1,0 |
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATMEGA644"/><Files><File00000 Name="G:\Mikrokopter\Flight_Crtl\V0064\gps.h" Position="268 103 1250 595" LineCol="100 0"/><File00001 Name="G:\Mikrokopter\Flight_Crtl\V0064\fc.c" Position="290 132 1264 594" LineCol="754 0"/><File00002 Name="G:\Mikrokopter\Flight_Crtl\V0064\GPS.c" Position="312 161 1286 623" LineCol="88 0"/></Files></AVRWorkspace> |
/branches/salvo_gps/Basis_v0067g/trunk/flightctrl.aws |
---|
0,0 → 1,0 |
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATMEGA644"/><Files><File00000 Name="G:\Mikrokopter\Flight_Crtl\v0067g\timer0.c" Position="266 101 894 593" LineCol="0 0" State="Maximized"/><File00001 Name="G:\Mikrokopter\Flight_Crtl\v0067g\analog.h" Position="288 130 908 592" LineCol="0 0" State="Maximized"/><File00002 Name="G:\Mikrokopter\Flight_Crtl\v0067g\makefile" Position="310 159 930 621" LineCol="7 0" State="Maximized"/><File00003 Name="G:\Mikrokopter\Flight_Crtl\v0067g\main.c" Position="332 188 952 650" LineCol="231 0" State="Maximized"/><File00004 Name="G:\Mikrokopter\Flight_Crtl\v0067g\fc.c" Position="262 71 1048 774" LineCol="1174 0" State="Maximized"/></Files></AVRWorkspace> |
/branches/salvo_gps/Basis_v0067g/trunk/gps.h |
---|
0,0 → 1,134 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Peter Muehlenbrock ("Salvo") |
// Definitionen fuer Modul GPS |
// Stand 12.10.007 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
extern signed int GPS_Nick; |
extern signed int GPS_Roll; |
extern void GPS_Neutral(void); |
extern void Get_Ublox_Msg(uint8_t rx) ; |
//extern short int Get_GPS_data(void); |
extern short int Get_Rel_Position(void); |
extern void GPS_Save_Home(void); |
extern short int GPS_CRTL(short int cmd); |
typedef struct { |
unsigned long utm_itow; // time of week |
long utm_east; // UTM Ost in cm |
long utm_north; // UTM Nord in cm |
long utm_alt; // hoehe in cm |
uint8_t utm_zone; // |
uint8_t utm_hem; // Hemisphere Indicator |
uint8_t status; // 0: kein gueltiges Paket 1: alles ok |
} NAV_POSUTM_t; |
typedef struct { |
unsigned long itow; // time of week |
uint8_t gpsfix_type;// 3=3D Fix |
uint8_t nav_status_flag; |
uint8_t nav_diff_status; |
uint8_t nav_resevd; |
long nav_tff; // Time to First Fix in ms |
long nav_msss; // ms since startup |
uint8_t status; // 0: kein gueltiges Paket 1: alles ok |
} NAV_STATUS_t; |
typedef struct { |
unsigned long itow; |
long speed_n; // in cm/s |
long speed_e; // in cm/s |
long speed_alt; // in cm/s |
unsigned long speed_3d; // in cm/s |
unsigned long speed_gnd; // V ueber Grund in cm/s |
long heading; // Richtung in deg/10000 |
unsigned long sacc; // Speed Genauigkeit in cm/s |
unsigned long cacc; // Richtungsgenauigkeit in deg |
uint8_t status; // 0: kein gueltiges Paket 1: alles ok |
} NAV_VELNED_t; |
typedef struct { |
long utm_east; // UTM Ost in 10 cm |
long utm_north; // UTM Nord in 10 cm |
long utm_alt; // hoehe in 10 cm |
unsigned long speed_gnd; // V ueber Grund in 10cm/s |
unsigned heading; // Richtung in Grad |
uint8_t status; // 0: keine gueltigen Daten 1: alles ok |
} GPS_ABS_POSITION_t; |
typedef struct { // Struktur fuer Relative GPS Daten (bezogen z.B. auf Home Position) |
int utm_east; // UTM Ost in 10 cm |
int utm_north; // UTM Nord in 10 cm |
int utm_alt ; // UTM Altiude in 10 cm |
uint8_t status; // 0: keine gueltigen Daten 1: alles ok |
} GPS_REL_POSITION_t; |
extern GPS_ABS_POSITION_t gps_act_position; |
extern GPS_ABS_POSITION_t gps_home_position; |
extern GPS_REL_POSITION_t gps_rel_act_position; |
extern GPS_REL_POSITION_t gps_rel_hold_position; |
extern short int gps_state,gps_sub_state; |
extern signed int GPS_hdng_abs_2trgt; |
extern signed int GPS_hdng_rel_2trgt; |
extern signed int GPS_dist_2trgt; |
extern signed int gps_reg_x,gps_reg_y; |
extern signed int GPS_dist_2trgt; |
extern unsigned int gps_alive_cnt; |
//nur provisorisch fuer Debugausgaben |
extern signed hdng_2home,dist_2home; //Richtung und Entfernung zur home Position |
extern long int dist_flown; |
// Zustaende der zentralen GPS statemachine |
#define GPS_CRTL_IDLE 0 // |
#define GPS_CRTL_HOLD_ACTIVE 1 // Lageregelung aktiv |
#define GPS_CRTL_HOME_ACTIVE 2 // Rueckflug zur Basis Aktiv |
#define GPS_HOME_FAST_IN_TOL 3 // Rueckflug: Aktuelle Position innerhalb der Toleranz |
#define GPS_HOME_FAST_OUTOF_TOL 4 // Rueckflug: Aktuelle Position ausserhalb der Toleranz |
#define GPS_HOME_RMPDWN_IN_TOL 5 // Rueckflug: beim Abbremsen Position innerhalb der Toleranz |
#define GPS_HOME_RMPDWN_OUTOF_TOL 6 // Rueckflug: beim Abbremsen Position ausserhalb der Toleranz |
#define GPS_HOME_IN_TOL 7 // Rueckflug: Nahe am Ziel innerhalb der Toleranz |
#define GPS_HOME_OUTOF_TOL 8 // Rueckflug: Nahe am Ziel ausserhalb der Toleranz |
#define GPS_HOME_FINISHED 9 // Rueckflug zur Basis abgeschlossen |
// Kommandokonstanten fuer die zentrale GPS Statemachine |
#define GPS_CMD_STOP 0 // Lageregelung soll deaktiviert werden |
#define GPS_CMD_REQ_INIT 1 // Initialisierung |
#define GPS_CMD_REQ_HOLD 3 // Lageregelung soll aktiviert werden |
#define GPS_CMD_REQ_HOME 4 // Das Heimfliegen soll aktiviert werden |
// Statusmeldungen der zentralen GPS statemachine |
#define GPS_STST_OK 0 // Kommando erfolgreich und abgeschlossen |
#define GPS_STST_PEND 1 // Kommando noch nicht komplett durchgefuehrt |
#define GPS_STST_ERR 2 // Fehler |
// GPS Lageregler |
#define GPS_NICKROLL_MAX 40 // Maximaler Einfluss des GPS Lagereglers auf Nick und Roll |
#define GPS_DIST_MAX 400 // Maximal zulaessige Distanz bevor Regelung gestoppt wird (in 10cm) |
#define GPS_STICK_HOLDOFF 25 // Wenn der Nick oder Roll Stickwerte groesser sind, wird GPS_HOLD deaktiviert |
#define GPS_V 8 // Teilerfaktor Regelabweichung zu Ausgabewert |
// Differenzierer Kennwerte fuer von Distanz abhaengige Verstaerkung, abhaengig vom Modus. |
#define GPS_DIFF_NRML_MAX_V 20 //maximale Verstaerkung * 10 |
#define GPS_DIFF_NRML_MAX_D 30 //Entfernung bei der maximale Verstaerkung erreicht wird in 10cm |
#define GPS_DIFF_FAST_MAX_V 15 //maximale Verstaerkung * 10 im Fast mode |
#define GPS_DIFF_FAST_MAX_D 50 //Entfernung bei der maximale Verstaerkung erreicht wird in 10cm im Fast mode |
// P-Regler Verstaerkung |
#define GPS_PROP_NRML_V 2 //maximale Verstaerkung * 2 |
#define GPS_PROP_FAST_V 2 //maximale Verstaerkung * 2 im Fast mode |
// GPS G2T /Go to Target Regler |
#define GPS_G2T_DIST_MAX_STOP 50 // Ab dieser Entfernung vom Zielpunkt soll die Geschwindigkeit runtergeregelt werden( in 10 cm) |
#define GPS_G2T_DIST_HOLD 30 // Ab dieser Entfernung vom Zielpunkt wird mit Minimaler Geschwindigkeit eingeregelt |
#define GPS_G2T_V_MAX 12 // Maximale Geschwindigkeit (in 10cm/0.25 Sekunden) mit der der Sollpunkt geaendert wird. |
#define GPS_G2T_V_RAMP_DWN 6 // Geschwindigkeit (in 10cm/0.25ekunden) in der Naehe der Home Position um abzubremsen |
#define GPS_G2T_V_MIN 3 // Minimale (in 10cm/0.25 Sekunden) ganz nahe an Homeposition. |
#define GPS_G2T_FAST_TOL 60 // Bei grosser Entfernung vom Ziel: Der Sollwert wird nur geaendert wenn die aktuelle Position nicht mehr als diesem Wert vom Sollwert abweicht |
#define GPS_G2T_NRML_TOL 40 // Bei kleiner Entfernung vom Ziel: Der Sollwert wird nur geaendert wenn die aktuelle Position nicht mehr als diesem Wert vom Sollwert abweicht |
/branches/salvo_gps/Basis_v0067g/trunk/main.c |
---|
0,0 → 1,227 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + Nur für den privaten Gebrauch |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nicht-kommerziellen Gebrauch zulässig ist. |
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
// + bzgl. der Nutzungsbedingungen aufzunehmen. |
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
// + Verkauf von Luftbildaufnahmen, usw. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
// + auf anderen Webseiten oder Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
// + eindeutig als Ursprung verlinkt und genannt werden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
// + Benutzung auf eigene Gefahr |
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
// + mit unserer Zustimmung zulässig |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
// + this list of conditions and the following disclaimer. |
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
// + from this software without specific prior written permission. |
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet |
// + for non-commercial use (directly or indirectly) |
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
// + with our written permission |
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be |
// + clearly linked as origin |
// + * porting to systems other than 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. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
unsigned char EEPromArray[E2END+1] EEMEM; |
unsigned char PlatinenVersion = 10; |
// -- Parametersatz aus EEPROM lesen --- |
// number [0..5] |
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length) |
{ |
if (number > 5) number = 5; |
eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length); |
} |
// -- Parametersatz ins EEPROM schreiben --- |
// number [0..5] |
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length) |
{ |
if(number > 5) number = 5; |
eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken |
} |
unsigned char GetActiveParamSetNumber(void) |
{ |
unsigned char set; |
set = eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]); |
if(set > 5) |
{ |
set = 2; |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], set); // diesen Parametersatz als aktuell merken |
} |
return(set); |
} |
//############################################################################ |
//Hauptprogramm |
int main (void) |
//############################################################################ |
{ |
unsigned int timer; |
unsigned int timer2 = 0; |
DDRB = 0x00; |
PORTB = 0x00; |
for(timer = 0; timer < 1000; timer++); // verzögern |
if(PINB & 0x01) PlatinenVersion = 11; else PlatinenVersion = 10; |
DDRC = 0x81; // SCL |
PORTC = 0xff; // Pullup SDA |
DDRB = 0x1B; // LEDs und Druckoffset |
PORTB = 0x01; // LED_Rot |
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5 |
DDRD |=0x80; // J7 |
PORTD = 0xF7; // LED |
MCUSR &=~(1<<WDRF); |
WDTCSR |= (1<<WDCE)|(1<<WDE); |
WDTCSR = 0; |
beeptime = 2000; |
StickGier = 0; PPM_in[K_GAS] = 0;StickRoll = 0; StickNick = 0; |
ROT_OFF; |
Timer_Init(); |
UART_Init(); |
rc_sum_init(); |
ADC_Init(); |
i2c_init(); |
sei(); |
VersionInfo.Hauptversion = VERSION_HAUPTVERSION; |
VersionInfo.Nebenversion = VERSION_NEBENVERSION; |
VersionInfo.PCKompatibel = VERSION_KOMPATIBEL; |
printf("\n\rFlightControl\n\rHardware:%d.%d\n\rSoftware:V%d.%d ",PlatinenVersion/10,PlatinenVersion%10, VERSION_HAUPTVERSION, VERSION_NEBENVERSION); |
printf("\n\r=============================="); |
GRN_ON; |
#define EE_DATENREVISION 62 // wird angepasst, wenn sich die EEPROM-Daten geändert haben |
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != EE_DATENREVISION) |
{ |
printf("\n\rInit. EEPROM: Generiere Default-Parameter..."); |
DefaultKonstanten1(); |
for (unsigned char i=0;i<6;i++) |
{ |
if(i==2) DefaultKonstanten2(); |
WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
} |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 2); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], EE_DATENREVISION); |
} |
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
printf("\n\rBenutze Parametersatz %d", GetActiveParamSetNumber()); |
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
printf("\n\rAbgleich Luftdrucksensor.."); |
timer = SetDelay(1000); |
SucheLuftruckOffset(); |
while (!CheckDelay(timer)); |
printf("OK\n\r"); |
} |
SetNeutral(); |
ROT_OFF; |
beeptime = 2000; |
DebugIn.Analog[1] = 1000; |
DebugIn.Digital[0] = 0x55; |
printf("\n\rSteuerung: "); |
if (EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) printf("HeadingHold"); |
else printf("Neutral"); |
printf("\n\n\r"); |
LcdClear(); |
I2CTimeout = 5000; |
while (1) |
{ |
if (UpdateMotor) // ReglerIntervall |
{ |
UpdateMotor=0; |
MotorRegler(); |
SendMotorData(); |
ROT_OFF; |
if(PcZugriff) PcZugriff--; |
if(SenderOkay) SenderOkay--; |
if(!I2CTimeout) |
{ |
I2CTimeout = 5; |
i2c_reset(); |
if((BeepMuster == 0xffff) && MotorenEin) |
{ |
beeptime = 10000; |
BeepMuster = 0x0080; |
} |
} |
else |
{ |
I2CTimeout--; |
ROT_OFF; |
} |
} |
if(SIO_DEBUG) |
{ |
DatenUebertragung(); |
BearbeiteRxDaten(); |
} |
else BearbeiteRxDaten(); |
if(CheckDelay(timer)) |
{ |
if(UBat < EE_Parameter.UnterspannungsWarnung) |
{ |
if(BeepMuster == 0xffff) |
{ |
beeptime = 6000; |
BeepMuster = 0x0300; |
} |
} |
timer = SetDelay(100); |
} |
} |
return (1); |
} |
/branches/salvo_gps/Basis_v0067g/trunk/main.h |
---|
0,0 → 1,98 |
#ifndef _MAIN_H |
#define _MAIN_H |
//Hier die Quarz Frequenz einstellen |
#if defined (__AVR_ATmega32__) |
#define SYSCLK 20000000L //Quarz Frequenz in Hz |
#endif |
#if defined (__AVR_ATmega644__) |
#define SYSCLK 20000000L //Quarz Frequenz in Hz |
//#define SYSCLK 16000000L //Quarz Frequenz in Hz |
#endif |
// neue Hardware |
#define ROT_OFF {if(PlatinenVersion == 10) PORTB &=~0x01; else PORTB |= 0x01;} |
#define ROT_ON {if(PlatinenVersion == 10) PORTB |= 0x01; else PORTB &=~0x01;} |
#define ROT_FLASH PORTB ^= 0x01 |
#define GRN_OFF PORTB &=~0x02 |
#define GRN_ON PORTB |= 0x02 |
#define GRN_FLASH PORTB ^= 0x02 |
//#ifndef F_CPU |
//#error ################## F_CPU nicht definiert oder ungültig ############# |
//#endif |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//#define ANZ_MITTELWERT 4 |
#define EEPROM_ADR_VALID 1 |
#define EEPROM_ADR_ACTIVE_SET 2 |
#define EEPROM_ADR_LAST_OFFSET 3 |
#define EEPROM_ADR_PARAM_BEGIN 100 |
#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_LOOP_OBEN 0x01 |
#define CFG_LOOP_UNTEN 0x02 |
#define CFG_LOOP_LINKS 0x04 |
#define CFG_LOOP_RECHTS 0x08 |
//#define SYSCLK |
//extern unsigned long SYSCLK; |
extern volatile int i_Nick[20],i_Roll[20],DiffNick,DiffRoll; |
extern volatile unsigned char SenderOkay; |
extern unsigned char CosinusNickWinkel, CosinusRollWinkel; |
extern unsigned char PlatinenVersion; |
extern void ReadParameterSet (unsigned char number, unsigned char *buffer, unsigned char length); |
extern void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length); |
extern unsigned char GetActiveParamSetNumber(void); |
extern unsigned char EEPromArray[]; |
#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 "_settings.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 "math.h" |
#include "gps.h" |
#ifndef EEMEM |
#define EEMEM __attribute__ ((section (".eeprom"))) |
#endif |
#define DEBUG_DISPLAY_INTERVALL 123 // in ms |
#define DELAY_US(x) ((unsigned int)( (x) * 1e-6 * F_CPU )) |
#endif //_MAIN_H |
/branches/salvo_gps/Basis_v0067g/trunk/makefile |
---|
0,0 → 1,391 |
#-------------------------------------------------------------------- |
# MCU name |
MCU = atmega644 |
F_CPU = 20000000 |
#------------------------------------------------------------------- |
HAUPT_VERSION = 0 |
NEBEN_VERSION = 02 |
VERSION_KOMPATIBEL = 5 # PC-Kompatibilität |
#------------------------------------------------------------------- |
ifeq ($(MCU), atmega32) |
# FUSE_SETTINGS= -u -U lfuse:w:0xff:m -U hfuse:w:0xcf:m |
HEX_NAME = MEGA32 |
endif |
ifeq ($(MCU), atmega644) |
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
#FUSE_SETTINGS = -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
# -u bei neuen Controllern wieder einspielen |
HEX_NAME = MEGA644 |
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). |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION) |
# 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 |
########################################################################################################## |
# List C source files here. (C dependencies are automatically generated.) |
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c |
SRC += twimaster.c rc.c fc.c GPS.c math.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 = |
# 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 |
CFLAGS += -DVERSION_HAUPTVERSION=$(HAUPT_VERSION) -DVERSION_NEBENVERSION=$(NEBEN_VERSION) -DVERSION_KOMPATIBEL=$(VERSION_KOMPATIBEL) |
# 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 += -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 = stk200 |
AVRDUDE_PROGRAMMER = dt006 |
#AVRDUDE_PROGRAMMER = ponyser |
#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_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_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) -A $(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 $(TARGET).eep \ |
$(TARGET).lss $(TARGET).sym 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; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi |
sizeafter: |
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); 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) $(TARGET).hex |
$(REMOVE) $(TARGET).eep |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).cof |
$(REMOVE) $(TARGET).elf |
$(REMOVE) $(TARGET).map |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).a90 |
$(REMOVE) $(TARGET).sym |
$(REMOVE) $(TARGET).lnk |
$(REMOVE) $(TARGET).lss |
$(REMOVE) $(OBJ) |
$(REMOVE) $(LST) |
$(REMOVE) $(SRC:.c=.s) |
$(REMOVE) $(SRC:.c=.d) |
# 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/salvo_gps/Basis_v0067g/trunk/math.c |
---|
0,0 → 1,126 |
/* |
This program (files math.c and math.h) is free software; you can redistribute it and/or modify |
it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; |
either version 3 of the License, or (at your option) any later version. |
This program 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 and GNU Lesser General Public License for more details. |
You should have received a copy of GNU General Public License (License_GPL.txt) and |
GNU Lesser General Public License (License_LGPL.txt) along with this program. |
If not, see <http://www.gnu.org/licenses/>. |
Please note: All the other files for the project "Mikrokopter" by H.Buss are under the license (license_buss.txt) published by www.mikrokopter.de |
*/ |
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Peter Muehlenbrock |
Winkelfunktionen sin, cos und arctan in |
brute-force Art: Sehr Schnell, nicht sonderlich genau, aber ausreichend |
get_dist Funktion fuer Entfernungsermittlung |
Stand 12.10.2007 |
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
*/ |
#include "main.h" |
// arctan Funktion: Eingabewert x,y Rueckgabe =arctan(x,y) in grad |
int arctan_i( signed int x, signed int y) |
{ |
short int change_xy = 0; |
signed int i; |
long signed int wert; |
int return_value; |
if ((abs(x)) > (abs(y))) // x,y Werte vertauschen damit arctan <45 grad bleibt |
{ |
change_xy = 1; |
i = x; |
x = y; |
y = i; |
} |
// Quadranten ermitteln |
// Wert durch lineare Interpolation ermitteln |
if ((y == 0) && (x == 0)) wert =1; // Division durch 0 nicht erlaubt |
else wert= abs(((long)x*1000)/((long)y)); |
if (wert <=268) //0...0.0,268 entsprechend 0..15 Grad |
{ |
return_value = (signed int)((wert*100)/(268-0)*(15-0)/100) +0; |
} |
else if (wert <=578) //0,268...0.0,568 entsprechend 15..30 Grad |
{ |
return_value = (signed int)((((wert-268)*100)/(578-268)*(30-15))/100) +15; |
} |
else //0,568...1 entsprechend 30..45 Grad |
{ |
return_value = (signed int)((((wert-578)*50)/(1000-578)*(45-30))/50) +30; |
} |
if (change_xy == 0) return_value = 90-return_value; //Quadrant 45..90 Grad |
if ((x >= 0) && (y <0)) return_value = - return_value; |
else if ((x < 0) && (y >= 0)) return_value = - return_value; |
return return_value; |
} |
// cosinus Funktion: Eingabewert Winkel in Grad, Rueckgabe =cos(winkel)*1000 |
signed int cos_i(signed int winkel) |
{ |
winkel = sin_i(90-winkel); |
return winkel; |
} |
const unsigned int pgm_sinus[91] PROGMEM = {0,17,35,52,70,87,105,122,139,156,174,191,208,225,242,259,276,292,309,326,342,358,375,391,407,423,438,454,469,485,500,515,530,545,559,574,588,602,616,629,643,656,669,682,695,707,719,731,743,755,766,777,788,799,809,819,829,839,848,857,866,875,883,891,899,906,914,921,927,934,940,946,951,956,961,966,970,974,978,982,985,988,990,993,995,996,998,999,999,1000,1000}; |
//von Nick666, Stand 28.9.2007 |
// sinus Funktion: Eingabewert Winkel in Grad, Rueckgabe =sin(winkel)*1000 |
signed int sin_i(signed int winkel) |
{ |
short int m,n; |
if (abs(winkel) >=360) winkel = winkel % 360; |
if (winkel < 0) |
{ |
m = -1; |
winkel = abs(winkel); |
} |
else m = +1; |
n =1; |
// Quadranten auswerten |
if ((winkel > 90 ) && (winkel <= 180)) winkel = 180 - winkel; |
else if ((winkel > 180 ) && (winkel <= 270)) |
{ |
winkel = winkel -180; |
n = -1; |
} |
else if ((winkel > 270) && (winkel <= 360)) |
{ |
winkel = 360 - winkel; |
n = -1; |
} |
// else //0 - 90 Grad |
winkel = pgm_read_word(&pgm_sinus[winkel]); |
return (winkel*m*n); |
} |
// Aus x,y und Winkel Distanz ermitteln |
long get_dist(signed int x, signed int y, signed int phi) |
{ |
long dist; |
if (abs(x) > abs(y) ) |
{ |
dist = (long) x; //Groesseren Wert wegen besserer Genauigkeit nehmen |
dist = abs((dist *1000) / (long) sin_i(phi)); |
} |
else |
{ |
dist = (long) y; |
dist = abs((dist *1000) / (long) cos_i(phi)); |
} |
return dist; |
} |
/branches/salvo_gps/Basis_v0067g/trunk/math.h |
---|
0,0 → 1,11 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Peter Muehlenbrock |
// Definitionen fuer Modul math |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
extern signed int sin_i(signed int winkel); |
extern signed int cos_i(signed int winkel); |
extern signed int arctan_i(signed int x, signed int y); |
extern long get_dist(signed int x, signed int y, signed int phi); |
/branches/salvo_gps/Basis_v0067g/trunk/menu.c |
---|
0,0 → 1,118 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
unsigned int TestInt = 0; |
#define ARRAYGROESSE 10 |
unsigned char Array[ARRAYGROESSE] = {1,2,3,4,5,6,7,8,9,10}; |
char DisplayBuff[80] = "Hallo Welt"; |
unsigned char DispPtr = 0; |
unsigned char RemoteTasten = 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(void) |
{ |
static unsigned char MaxMenue = 10,MenuePunkt=0; |
if(RemoteTasten & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LcdClear(); } |
if(RemoteTasten & KEY2) { MenuePunkt++; LcdClear(); } |
if((RemoteTasten & KEY1) && (RemoteTasten & KEY2)) MenuePunkt = 0; |
LCD_printfxy(17,0,"[%i]",MenuePunkt); |
switch(MenuePunkt) |
{ |
case 0: |
LCD_printfxy(0,0,"++ MikroKopter ++"); |
LCD_printfxy(0,1,"HW:V%d.%d SW:%d.%d",PlatinenVersion/10,PlatinenVersion%10,VERSION_HAUPTVERSION, VERSION_NEBENVERSION); |
LCD_printfxy(0,2,"Setting: %d ",GetActiveParamSetNumber()); |
LCD_printfxy(0,3,"(c) Holger Buss"); |
// if(RemoteTasten & KEY3) TestInt--; |
// if(RemoteTasten & KEY4) TestInt++; |
break; |
case 1: |
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
LCD_printfxy(0,0,"Hoehe: %5i",HoehenWert); |
LCD_printfxy(0,1,"SollHoehe: %5i",SollHoehe); |
LCD_printfxy(0,2,"Luftdruck: %5i",MessLuftdruck); |
LCD_printfxy(0,3,"Off : %5i",DruckOffsetSetting); |
} |
else |
{ |
LCD_printfxy(0,1,"Keine "); |
LCD_printfxy(0,2,"Höhenregelung"); |
} |
break; |
case 2: |
LCD_printfxy(0,0,"akt. Lage"); |
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024); |
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024); |
LCD_printfxy(0,3,"Kompass: %5i",KompassValue); |
break; |
case 3: |
LCD_printfxy(0,0,"K1:%4i K2:%4i ",PPM_in[1],PPM_in[2]); |
LCD_printfxy(0,1,"K3:%4i K4:%4i ",PPM_in[3],PPM_in[4]); |
LCD_printfxy(0,2,"K5:%4i K6:%4i ",PPM_in[5],PPM_in[6]); |
LCD_printfxy(0,3,"K7:%4i K8:%4i ",PPM_in[7],PPM_in[8]); |
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]],PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]); |
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]); |
LCD_printfxy(0,3,"P3:%4i P4:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]]); |
break; |
case 5: |
LCD_printfxy(0,0,"Gyro - Sensor"); |
LCD_printfxy(0,1,"Nick %4i (%3i)",AccumulateNick / MessanzahlNick, AdNeutralNick); |
LCD_printfxy(0,2,"Roll %4i (%3i)",AccumulateRoll / MessanzahlRoll, AdNeutralRoll); |
LCD_printfxy(0,3,"Gier %4i (%3i)",AccumulateGier / MessanzahlGier, AdNeutralGier); |
break; |
case 6: |
LCD_printfxy(0,0,"ACC - Sensor"); |
LCD_printfxy(0,1,"Nick %4i (%3i)",accumulate_AccNick / messanzahl_AccNick,NeutralAccX); |
LCD_printfxy(0,2,"Roll %4i (%3i)",accumulate_AccRoll / messanzahl_AccRoll,NeutralAccY); |
LCD_printfxy(0,3,"Hoch %4i (%3i)",Aktuell_az/*accumulate_AccHoch / messanzahl_AccHoch*/,(int)NeutralAccZ); |
break; |
case 7: |
LCD_printfxy(0,1,"Spannung: %5i",UBat); |
LCD_printfxy(0,2,"Empf.Pegel:%5i",SenderOkay); |
break; |
case 8: |
LCD_printfxy(0,0,"Kompass "); |
LCD_printfxy(0,1,"Richtung: %5i",KompassRichtung); |
LCD_printfxy(0,2,"Messwert: %5i",KompassValue); |
LCD_printfxy(0,3,"Start: %5i",KompassStartwert); |
break; |
case 9: |
LCD_printfxy(0,0,"Poti1: %3i",Poti1); |
LCD_printfxy(0,1,"Poti2: %3i",Poti2); |
LCD_printfxy(0,2,"Poti3: %3i",Poti3); |
LCD_printfxy(0,3,"Poti4: %3i",Poti4); |
break; |
case 10: |
LCD_printfxy(0,0,"Servo " ); |
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl); |
LCD_printfxy(0,2,"Stellung: %3i",ServoValue); |
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax); |
break; |
default: MaxMenue = MenuePunkt - 1; |
MenuePunkt = 0; |
break; |
} |
RemoteTasten = 0; |
} |
/branches/salvo_gps/Basis_v0067g/trunk/menu.h |
---|
0,0 → 1,5 |
extern void Menu(void); |
extern char DisplayBuff[80]; |
extern unsigned char DispPtr; |
unsigned char RemoteTasten; |
/branches/salvo_gps/Basis_v0067g/trunk/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/salvo_gps/Basis_v0067g/trunk/printf_P.c |
---|
0,0 → 1,480 |
// 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. |
*/ |
/****************************************************************************** |
This file is a patched version of printf called _printf_P |
It is made to work with avr-gcc for Atmel AVR MCUs. |
There are some differences from standard printf: |
1. There is no floating point support (with fp the code is about 8K!) |
2. Return type is void |
3. Format string must be in program memory (by using macro printf this is |
done automaticaly) |
4. %n is not implemented (just remove the comment around it if you need it) |
5. If LIGHTPRINTF is defined, the code is about 550 bytes smaller and the |
folowing specifiers are disabled : |
space # * . - + p s o O |
6. A function void uart_sendchar(char c) is used for output. The UART must |
be initialized before using printf. |
Alexander Popov |
sasho@vip.orbitel.bg |
******************************************************************************/ |
/* |
* Actual printf innards. |
* |
* This code is large and complicated... |
*/ |
#include <string.h> |
#ifdef __STDC__ |
#include <stdarg.h> |
#else |
#include <varargs.h> |
#endif |
#include "main.h" |
//#define LIGHTPRINTF |
char PrintZiel; |
char Putchar(char zeichen) |
{ |
if(PrintZiel == OUT_LCD) { DisplayBuff[DispPtr++] = zeichen; return(1);} |
else return(uart_putchar(zeichen)); |
} |
void PRINT(const char * ptr, unsigned int len) |
{ |
for(;len;len--) Putchar(*ptr++); |
} |
void PRINTP(const char * ptr, unsigned int len) |
{ |
for(;len;len--) Putchar(pgm_read_byte(ptr++)); |
} |
void PAD_SP(signed char howmany) |
{ |
for(;howmany>0;howmany--) Putchar(' '); |
} |
void PAD_0(signed char howmany) |
{ |
for(;howmany>0;howmany--) Putchar('0'); |
} |
#define BUF 40 |
/* |
* Macros for converting digits to letters and vice versa |
*/ |
#define to_digit(c) ((c) - '0') |
#define is_digit(c) ((c)<='9' && (c)>='0') |
#define to_char(n) ((n) + '0') |
/* |
* Flags used during conversion. |
*/ |
#define LONGINT 0x01 /* long integer */ |
#define LONGDBL 0x02 /* long double; unimplemented */ |
#define SHORTINT 0x04 /* short integer */ |
#define ALT 0x08 /* alternate form */ |
#define LADJUST 0x10 /* left adjustment */ |
#define ZEROPAD 0x20 /* zero (as opposed to blank) pad */ |
#define HEXPREFIX 0x40 /* add 0x or 0X prefix */ |
void _printf_P (char ziel,char const *fmt0, ...) /* Works with string from FLASH */ |
{ |
va_list ap; |
register const char *fmt; /* format string */ |
register char ch; /* character from fmt */ |
register int n; /* handy integer (short term usage) */ |
register char *cp; /* handy char pointer (short term usage) */ |
const char *fmark; /* for remembering a place in fmt */ |
register unsigned char flags; /* flags as above */ |
signed char width; /* width from format (%8d), or 0 */ |
signed char prec; /* precision from format (%.3d), or -1 */ |
char sign; /* sign prefix (' ', '+', '-', or \0) */ |
unsigned long _ulong=0; /* integer arguments %[diouxX] */ |
#define OCT 8 |
#define DEC 10 |
#define HEX 16 |
unsigned char base; /* base for [diouxX] conversion */ |
signed char dprec; /* a copy of prec if [diouxX], 0 otherwise */ |
signed char dpad; /* extra 0 padding needed for integers */ |
signed char fieldsz; /* field size expanded by sign, dpad etc */ |
/* The initialization of 'size' is to suppress a warning that |
'size' might be used unitialized. It seems gcc can't |
quite grok this spaghetti code ... */ |
signed char size = 0; /* size of converted field or string */ |
char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */ |
char ox[2]; /* space for 0x hex-prefix */ |
PrintZiel = ziel; // bestimmt, LCD oder UART |
va_start(ap, fmt0); |
fmt = fmt0; |
/* |
* Scan the format for conversions (`%' character). |
*/ |
for (;;) { |
for (fmark = fmt; (ch = pgm_read_byte(fmt)) != '\0' && ch != '%'; fmt++) |
/* void */; |
if ((n = fmt - fmark) != 0) { |
PRINTP(fmark, n); |
} |
if (ch == '\0') |
goto done; |
fmt++; /* skip over '%' */ |
flags = 0; |
dprec = 0; |
width = 0; |
prec = -1; |
sign = '\0'; |
rflag: ch = PRG_RDB(fmt++); |
reswitch: |
#ifdef LIGHTPRINTF |
if (ch=='o' || ch=='u' || (ch|0x20)=='x') { |
#else |
if (ch=='u' || (ch|0x20)=='x') { |
#endif |
if (flags&LONGINT) { |
_ulong=va_arg(ap, unsigned long); |
} else { |
register unsigned int _d; |
_d=va_arg(ap, unsigned int); |
_ulong = flags&SHORTINT ? (unsigned long)(unsigned short)_d : (unsigned long)_d; |
} |
} |
#ifndef LIGHTPRINTF |
if(ch==' ') { |
/* |
* ``If the space and + flags both appear, the space |
* flag will be ignored.'' |
* -- ANSI X3J11 |
*/ |
if (!sign) |
sign = ' '; |
goto rflag; |
} else if (ch=='#') { |
flags |= ALT; |
goto rflag; |
} else if (ch=='*'||ch=='-') { |
if (ch=='*') { |
/* |
* ``A negative field width argument is taken as a |
* - flag followed by a positive field width.'' |
* -- ANSI X3J11 |
* They don't exclude field widths read from args. |
*/ |
if ((width = va_arg(ap, int)) >= 0) |
goto rflag; |
width = -width; |
} |
flags |= LADJUST; |
flags &= ~ZEROPAD; /* '-' disables '0' */ |
goto rflag; |
} else if (ch=='+') { |
sign = '+'; |
goto rflag; |
} else if (ch=='.') { |
if ((ch = PRG_RDB(fmt++)) == '*') { |
n = va_arg(ap, int); |
prec = n < 0 ? -1 : n; |
goto rflag; |
} |
n = 0; |
while (is_digit(ch)) { |
n = n*10 + to_digit(ch); |
ch = PRG_RDB(fmt++); |
} |
prec = n < 0 ? -1 : n; |
goto reswitch; |
} else |
#endif /* LIGHTPRINTF */ |
if (ch=='0') { |
/* |
* ``Note that 0 is taken as a flag, not as the |
* beginning of a field width.'' |
* -- ANSI X3J11 |
*/ |
if (!(flags & LADJUST)) |
flags |= ZEROPAD; /* '-' disables '0' */ |
goto rflag; |
} else if (ch>='1' && ch<='9') { |
n = 0; |
do { |
n = 10 * n + to_digit(ch); |
ch = PRG_RDB(fmt++); |
} while (is_digit(ch)); |
width = n; |
goto reswitch; |
} else if (ch=='h') { |
flags |= SHORTINT; |
goto rflag; |
} else if (ch=='l') { |
flags |= LONGINT; |
goto rflag; |
} else if (ch=='c') { |
*(cp = buf) = va_arg(ap, int); |
size = 1; |
sign = '\0'; |
} else if (ch=='D'||ch=='d'||ch=='i') { |
if(ch=='D') |
flags |= LONGINT; |
if (flags&LONGINT) { |
_ulong=va_arg(ap, long); |
} else { |
register int _d; |
_d=va_arg(ap, int); |
_ulong = flags&SHORTINT ? (long)(short)_d : (long)_d; |
} |
if ((long)_ulong < 0) { |
_ulong = -_ulong; |
sign = '-'; |
} |
base = DEC; |
goto number; |
} else |
/* |
if (ch=='n') { |
if (flags & LONGINT) |
*va_arg(ap, long *) = ret; |
else if (flags & SHORTINT) |
*va_arg(ap, short *) = ret; |
else |
*va_arg(ap, int *) = ret; |
continue; // no output |
} else |
*/ |
#ifndef LIGHTPRINTF |
if (ch=='O'||ch=='o') { |
if (ch=='O') |
flags |= LONGINT; |
base = OCT; |
goto nosign; |
} else if (ch=='p') { |
/* |
* ``The argument shall be a pointer to void. The |
* value of the pointer is converted to a sequence |
* of printable characters, in an implementation- |
* defined manner.'' |
* -- ANSI X3J11 |
*/ |
/* NOSTRICT */ |
_ulong = (unsigned int)va_arg(ap, void *); |
base = HEX; |
flags |= HEXPREFIX; |
ch = 'x'; |
goto nosign; |
} else if (ch=='s') { // print a string from RAM |
if ((cp = va_arg(ap, char *)) == NULL) { |
cp=buf; |
cp[0] = '('; |
cp[1] = 'n'; |
cp[2] = 'u'; |
cp[4] = cp[3] = 'l'; |
cp[5] = ')'; |
cp[6] = '\0'; |
} |
if (prec >= 0) { |
/* |
* can't use strlen; can only look for the |
* NUL in the first `prec' characters, and |
* strlen() will go further. |
*/ |
char *p = (char*)memchr(cp, 0, prec); |
if (p != NULL) { |
size = p - cp; |
if (size > prec) |
size = prec; |
} else |
size = prec; |
} else |
size = strlen(cp); |
sign = '\0'; |
} else |
#endif /* LIGHTPRINTF */ |
if(ch=='U'||ch=='u') { |
if (ch=='U') |
flags |= LONGINT; |
base = DEC; |
goto nosign; |
} else if (ch=='X'||ch=='x') { |
base = HEX; |
/* leading 0x/X only if non-zero */ |
if (flags & ALT && _ulong != 0) |
flags |= HEXPREFIX; |
/* unsigned conversions */ |
nosign: sign = '\0'; |
/* |
* ``... diouXx conversions ... if a precision is |
* specified, the 0 flag will be ignored.'' |
* -- ANSI X3J11 |
*/ |
number: if ((dprec = prec) >= 0) |
flags &= ~ZEROPAD; |
/* |
* ``The result of converting a zero value with an |
* explicit precision of zero is no characters.'' |
* -- ANSI X3J11 |
*/ |
cp = buf + BUF; |
if (_ulong != 0 || prec != 0) { |
register unsigned char _d,notlastdigit; |
do { |
notlastdigit=(_ulong>=base); |
_d = _ulong % base; |
if (_d<10) { |
_d+='0'; |
} else { |
_d+='a'-10; |
if (ch=='X') _d&=~0x20; |
} |
*--cp=_d; |
_ulong /= base; |
} while (notlastdigit); |
#ifndef LIGHTPRINTF |
// handle octal leading 0 |
if (base==OCT && flags & ALT && *cp != '0') |
*--cp = '0'; |
#endif |
} |
size = buf + BUF - cp; |
} else { //default |
/* "%?" prints ?, unless ? is NUL */ |
if (ch == '\0') |
goto done; |
/* pretend it was %c with argument ch */ |
cp = buf; |
*cp = ch; |
size = 1; |
sign = '\0'; |
} |
/* |
* All reasonable formats wind up here. At this point, |
* `cp' points to a string which (if not flags&LADJUST) |
* should be padded out to `width' places. If |
* flags&ZEROPAD, it should first be prefixed by any |
* sign or other prefix; otherwise, it should be blank |
* padded before the prefix is emitted. After any |
* left-hand padding and prefixing, emit zeroes |
* required by a decimal [diouxX] precision, then print |
* the string proper, then emit zeroes required by any |
* leftover floating precision; finally, if LADJUST, |
* pad with blanks. |
*/ |
/* |
* compute actual size, so we know how much to pad. |
*/ |
fieldsz = size; |
dpad = dprec - size; |
if (dpad < 0) |
dpad = 0; |
if (sign) |
fieldsz++; |
else if (flags & HEXPREFIX) |
fieldsz += 2; |
fieldsz += dpad; |
/* right-adjusting blank padding */ |
if ((flags & (LADJUST|ZEROPAD)) == 0) |
PAD_SP(width - fieldsz); |
/* prefix */ |
if (sign) { |
PRINT(&sign, 1); |
} else if (flags & HEXPREFIX) { |
ox[0] = '0'; |
ox[1] = ch; |
PRINT(ox, 2); |
} |
/* right-adjusting zero padding */ |
if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD) |
PAD_0(width - fieldsz); |
/* leading zeroes from decimal precision */ |
PAD_0(dpad); |
/* the string or number proper */ |
PRINT(cp, size); |
/* left-adjusting padding (always blank) */ |
if (flags & LADJUST) |
PAD_SP(width - fieldsz); |
} |
done: |
va_end(ap); |
} |
/branches/salvo_gps/Basis_v0067g/trunk/printf_P.h |
---|
0,0 → 1,19 |
#ifndef _PRINTF_P_H_ |
#define _PRINTF_P_H_ |
#include <avr/pgmspace.h> |
#define OUT_V24 0 |
#define OUT_LCD 1 |
extern void _printf_P (char, char const *fmt0, ...); |
extern char PrintZiel; |
#define printf_P(format, args...) _printf_P(OUT_V24,format , ## args) |
#define printf(format, args...) _printf_P(OUT_V24,PSTR(format) , ## args) |
#define LCD_printfxy(x,y,format, args...) { DispPtr = y * 20 + x; _printf_P(OUT_LCD,PSTR(format) , ## args);} |
#define LCD_printf(format, args...) { _printf_P(OUT_LCD,PSTR(format) , ## args);} |
#endif |
/branches/salvo_gps/Basis_v0067g/trunk/rc.c |
---|
0,0 → 1,85 |
/*####################################################################################### |
Decodieren eines RC Summen Signals |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "rc.h" |
#include "main.h" |
volatile int PPM_in[11]; |
volatile int PPM_diff[11]; // das diffenzierte Stick-Signal |
volatile unsigned char NewPpmData = 1; |
//############################################################################ |
//zum decodieren des PPM-Signals wird Timer1 mit seiner Input |
//Capture Funktion benutzt: |
void rc_sum_init (void) |
//############################################################################ |
{ |
TCCR1B=(1<<CS11)|(1<<CS10)|(1<<ICES1)|(1<<ICNC1);//|(1 << WGM12); //timer1 prescale 64 |
// PWM |
//TCCR1A = (1 << COM1B1) | (1 << WGM11) | (1 << WGM10); |
//TCCR1B |= (1 << WGM12); |
//OCR1B = 55; |
TIMSK1 |= _BV(ICIE1); |
AdNeutralGier = 0; |
AdNeutralRoll = 0; |
AdNeutralNick = 0; |
return; |
} |
//############################################################################ |
//Diese Routine startet und inizialisiert den Timer für RC |
SIGNAL(SIG_INPUT_CAPTURE1) |
//############################################################################ |
{ |
static unsigned int AltICR=0; |
signed int signal = 0,tmp; |
static int index; |
signal = (unsigned int) ICR1 - AltICR; |
AltICR = ICR1; |
//Syncronisationspause? |
if ((signal > 1500) && (signal < 8000)) |
{ |
index = 1; |
NewPpmData = 0; // Null bedeutet: Neue Daten |
// OCR2A = Poti2/2 + 80; |
} |
else |
{ |
if(index < 10) |
{ |
if((signal > 250) && (signal < 687)) |
{ |
signal -= 466; |
// 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++; |
PPM_diff[index] = tmp - PPM_in[index]; |
PPM_in[index] = tmp; |
} |
index++; |
if(index == 5) PORTD |= 0x20; else PORTD &= ~0x20; // Servosignal an J3 anlegen |
if(index == 6) PORTD |= 0x10; else PORTD &= ~0x10; // Servosignal an J4 anlegen |
if(index == 7) PORTD |= 0x08; else PORTD &= ~0x08; // Servosignal an J5 anlegen |
} |
} |
} |
/branches/salvo_gps/Basis_v0067g/trunk/rc.h |
---|
0,0 → 1,29 |
/*####################################################################################### |
Derkodieren eines RC Summen Signals |
#######################################################################################*/ |
#ifndef _RC_H |
#define _RC_H |
#if defined (__AVR_ATmega32__) |
#define TIMER_TEILER CK64 |
#define TIMER_RELOAD_VALUE 250 |
#endif |
#if defined (__AVR_ATmega644__) |
//#define TIMER_TEILER CK64 |
#define TIMER_RELOAD_VALUE 250 |
//#define TIMER_TEILER CK256 // bei 20MHz |
//#define TIMER_RELOAD_VALUE -78 // bei 20MHz |
#endif |
#define GAS PPM_in[2] |
extern void rc_sum_init (void); |
extern volatile int PPM_in[11]; |
extern volatile int PPM_diff[11]; // das diffenzierte Stick-Signal |
extern volatile unsigned char NewPpmData; |
#endif //_RC_H |
/branches/salvo_gps/Basis_v0067g/trunk/timer0.c |
---|
0,0 → 1,187 |
#include "main.h" |
volatile unsigned int CountMilliseconds = 0; |
volatile static unsigned int tim_main; |
volatile unsigned char UpdateMotor = 0; |
volatile unsigned int cntKompass = 0; |
volatile unsigned int beeptime = 0; |
unsigned int BeepMuster = 0xffff; |
int ServoValue = 0; |
//Salvo 8.9.2007 |
volatile uint8_t Kompass_Neuer_Wert= 0; |
volatile unsigned int Kompass_Value_Old = 0; |
// Salvo End |
//Salvo 21.9.2007 |
short unsigned int Kompass_present= 0; //>0 bedeutet dass der Kompass vorhanden ist |
// Salvo End |
enum { |
STOP = 0, |
CK = 1, |
CK8 = 2, |
CK64 = 3, |
CK256 = 4, |
CK1024 = 5, |
T0_FALLING_EDGE = 6, |
T0_RISING_EDGE = 7 |
}; |
// Aenderungen von Peter Muehlenbrock ("Salvo") Stand 21.9.2007 |
/* |
Driftkompensation fuer Gyros verbessert |
Linearsensor mit fixem Neutralwert |
Ersatzkompass abgeleitet aus Magnetkompass und Giergyro fuer nahezu neigungsubhaengige Kompassfunktion |
*/ |
SIGNAL (SIG_OVERFLOW0) // 8kHz |
{ |
static unsigned char cnt_1ms = 1,cnt = 0; |
unsigned char pieper_ein = 0; |
// TCNT0 -= 250;//TIMER_RELOAD_VALUE; |
if(!cnt--) |
{ |
if (Kompass_present > 0) Kompass_present--; //Runterzaehlen. Wenn 0 ist der Kompass nicht vorhanden |
cnt = 9; |
cnt_1ms++; |
cnt_1ms %= 2; |
if(!cnt_1ms) UpdateMotor = 1; |
CountMilliseconds++; |
if(Timeout) Timeout--; |
} |
if(beeptime > 1) |
{ |
beeptime--; |
if(beeptime & BeepMuster) |
{ |
pieper_ein = 1; |
} |
else pieper_ein = 0; |
} |
else |
{ |
pieper_ein = 0; |
BeepMuster = 0xffff; |
} |
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); |
} |
// if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) |
{ |
if(PINC & 0x10) |
{ |
cntKompass++; |
} |
else |
{ |
if((cntKompass) && (cntKompass < 4000)) |
{ |
// Salvo Kompassoffset 30.8.2007 und 21.9.2007 *********** |
Kompass_present = 255; |
Kompass_Value_Old = KompassValue; |
KompassValue = cntKompass -KOMPASS_OFFSET; |
if (KompassValue < 0) |
{ |
KompassValue += 360; |
} |
if (KompassValue >= 360) |
{ |
KompassValue -= 360; |
} |
// Salvo End |
} |
// if(cntKompass < 10) cntKompass = 10; |
// KompassValue = (unsigned long)((unsigned long)(cntKompass-10)*720L + 1L) / 703L; |
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180; |
//Salvo 13.9.2007 Ok Erkennung des Magnetkompasses |
Kompass_Neuer_Wert = 1; |
// Salvo End |
cntKompass = 0; |
} |
} |
} |
void Timer_Init(void) |
{ |
tim_main = SetDelay(10); |
TCCR0B = CK8; |
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM |
OCR0A = 0; |
OCR0B = 120; |
TCNT0 = -TIMER_RELOAD_VALUE; // reload |
//OCR1 = 0x00; |
TCCR2A=(1<<COM2A1)|(1<<COM2A0)|3; |
TCCR2B=(0<<CS20)|(1<<CS21)|(1<<CS22); |
// TIMSK2 |= _BV(TOIE2); |
TIMSK2 |= _BV(OCIE2A); |
TIMSK0 |= _BV(TOIE0); |
OCR2A = 10; |
TCNT2 = 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)); |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Servo ansteuern |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(SIG_OUTPUT_COMPARE2A) |
{ |
static unsigned char timer = 10; |
if(!timer--) |
{ |
TCCR2A=(1<<COM2A1)|(0<<COM2A0)|3; |
ServoValue = Parameter_ServoNickControl; |
if(EE_Parameter.ServoNickCompInvert & 0x01) ServoValue += ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512; |
else ServoValue -= ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512; |
if(ServoValue < EE_Parameter.ServoNickMin) ServoValue = EE_Parameter.ServoNickMin; |
else if(ServoValue > EE_Parameter.ServoNickMax) ServoValue = EE_Parameter.ServoNickMax; |
OCR2A = ServoValue;// + 75; |
timer = EE_Parameter.ServoNickRefresh; |
} |
else |
{ |
TCCR2A =3; |
PORTD&=~0x80; |
} |
} |
/branches/salvo_gps/Basis_v0067g/trunk/timer0.h |
---|
0,0 → 1,25 |
#define TIMER_TEILER CK8 |
#define TIMER_RELOAD_VALUE 250 |
// Salvo Kompassoffset 31.8.2007 *********** |
#define KOMPASS_OFFSET 135 // Winkel zwischen Nordachse Kopter und Nordachse Kompass |
// Salvo End |
void Timer_Init(void); |
void Delay_ms(unsigned int); |
unsigned int SetDelay (unsigned int t); |
char CheckDelay (unsigned int t); |
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 int ServoValue; |
//Salvo 21.9.2007 |
extern volatile uint8_t Kompass_Neuer_Wert; |
extern volatile unsigned int Kompass_Value_Old; |
extern unsigned short int Kompass_present; |
// Salvo End |
/branches/salvo_gps/Basis_v0067g/trunk/twimaster.c |
---|
0,0 → 1,152 |
/*############################################################################ |
############################################################################*/ |
#include "main.h" |
unsigned char twi_state = 0; |
unsigned char motor = 0; |
unsigned char motorread = 0; |
unsigned char motor_rx[8]; |
//############################################################################ |
//Initzialisieren der I2C (TWI) Schnittstelle |
void i2c_init(void) |
//############################################################################ |
{ |
TWSR = 0; |
TWBR = ((SYSCLK/SCL_CLOCK)-16)/2; |
} |
//############################################################################ |
//Start I2C |
char i2c_start(void) |
//############################################################################ |
{ |
TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE); |
return(0); |
} |
//############################################################################ |
//Start I2C |
void i2c_stop(void) |
//############################################################################ |
{ |
TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT); |
} |
void i2c_reset(void) |
//############################################################################ |
{ |
i2c_stop(); |
twi_state = 0; |
motor = TWDR; |
motor = 0; |
TWCR = 0x80; |
TWAMR = 0; |
TWAR = 0; |
TWDR = 0; |
TWSR = 0; |
TWBR = 0; |
i2c_init(); |
i2c_start(); |
i2c_write_byte(0); |
} |
//############################################################################ |
//Start I2C |
char i2c_write_byte(char byte) |
//############################################################################ |
{ |
TWSR = 0x00; |
TWDR = byte; |
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE); |
return(0); |
} |
//############################################################################ |
//Start I2C |
SIGNAL (TWI_vect) |
//############################################################################ |
{ |
switch (twi_state++) |
{ |
case 0: |
i2c_write_byte(0x52+(motor*2)); |
break; |
case 1: |
switch(motor++) |
{ |
case 0: |
i2c_write_byte(Motor_Vorne); |
break; |
case 1: |
i2c_write_byte(Motor_Hinten); |
break; |
case 2: |
i2c_write_byte(Motor_Rechts); |
break; |
case 3: |
i2c_write_byte(Motor_Links); |
break; |
} |
break; |
case 2: |
i2c_stop(); |
if (motor<4) twi_state = 0; |
else motor = 0; |
i2c_start(); |
break; |
//Liest Daten von Motor |
case 3: |
i2c_write_byte(0x53+(motorread*2)); |
break; |
case 4: |
switch(motorread) |
{ |
case 0: |
i2c_write_byte(Motor_Vorne); |
break; |
case 1: |
i2c_write_byte(Motor_Hinten); |
break; |
case 2: |
i2c_write_byte(Motor_Rechts); |
break; |
case 3: |
i2c_write_byte(Motor_Links); |
break; |
} |
break; |
case 5: //1 Byte vom Motor lesen |
motor_rx[motorread] = TWDR; |
case 6: |
switch(motorread) |
{ |
case 0: |
i2c_write_byte(Motor_Vorne); |
break; |
case 1: |
i2c_write_byte(Motor_Hinten); |
break; |
case 2: |
i2c_write_byte(Motor_Rechts); |
break; |
case 3: |
i2c_write_byte(Motor_Links); |
break; |
} |
break; |
case 7: //2 Byte vom Motor lesen |
motor_rx[motorread+4] = TWDR; |
motorread++; |
if (motorread>3) motorread=0; |
i2c_stop(); |
I2CTimeout = 10; |
twi_state = 0; |
} |
TWCR |= 0x80; |
} |
/branches/salvo_gps/Basis_v0067g/trunk/twimaster.h |
---|
0,0 → 1,32 |
/*############################################################################ |
############################################################################*/ |
#ifndef _I2C_MASTER_H |
#define _I2C_MASTER_H |
//############################################################################ |
// I2C Konstanten |
#define SCL_CLOCK 200000L |
#define I2C_TIMEOUT 30000 |
#define I2C_START 0x08 |
#define I2C_REPEATED_START 0x10 |
#define I2C_TX_SLA_ACK 0x18 |
#define I2C_TX_DATA_ACK 0x28 |
#define I2C_RX_SLA_ACK 0x40 |
#define I2C_RX_DATA_ACK 0x50 |
//############################################################################ |
extern unsigned char twi_state; |
extern unsigned char motor; |
extern unsigned char motorread; |
extern unsigned char motor_rx[8]; |
void i2c_init (void); // I2C initialisieren |
char i2c_start (void); // Start I2C |
void i2c_stop (void); // Stop I2C |
char i2c_write_byte (char byte); // 1 Byte schreiben |
#endif |
/branches/salvo_gps/Basis_v0067g/trunk/uart.c |
---|
0,0 → 1,340 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "uart.h" |
unsigned char DebugGetAnforderung = 0,DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0; |
unsigned volatile char SioTmp = 0; |
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF]; |
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF]; |
unsigned volatile char NMEABuffer[MAX_EMPFANGS_BUFF]; |
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 PC_DebugTimeout = 0; |
unsigned char PcZugriff = 100; |
unsigned char MotorTest[4] = {0,0,0,0}; |
unsigned char MeineSlaveAdresse; |
struct str_DebugOut DebugOut; |
struct str_Debug DebugIn; |
struct str_VersionInfo VersionInfo; |
int Debug_Timer; |
//Salvo 26.10.2007 |
int dataset_cnt=0; //Zahelt die uebertragenen Debugdaten |
//Salvo End |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Sende-Part der Datenübertragung |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(INT_VEC_TX) |
{ |
static unsigned int ptr = 0; |
unsigned char tmp_tx; |
if(!UebertragungAbgeschlossen) |
{ |
ptr++; // die [0] wurde schon gesendet |
tmp_tx = SendeBuffer[ptr]; |
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF)) |
{ |
ptr = 0; |
UebertragungAbgeschlossen = 1; |
} |
UDR = tmp_tx; |
} |
else ptr = 0; |
} |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(INT_VEC_RX) |
{ |
static unsigned int crc; |
static unsigned char crc1,crc2,buf_ptr; |
static unsigned char UartState = 0; |
unsigned char CrcOkay = 0; |
SioTmp = UDR; |
//Salvo 11.9.2007 GPS Daten holen |
Get_Ublox_Msg(SioTmp); // Daten vom GPS Modul holen |
// Salvo End |
if(buf_ptr >= MAX_EMPFANGS_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; |
RxdBuffer[buf_ptr] = '\r'; |
if(RxdBuffer[2] == 'R') wdt_enable(WDTO_250MS); // Reset-Commando |
} |
} |
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 += SendeBuffer[i]; |
} |
tmpCRC %= 4096; |
SendeBuffer[i++] = '=' + tmpCRC / 64; |
SendeBuffer[i++] = '=' + tmpCRC % 64; |
SendeBuffer[i++] = '\r'; |
UebertragungAbgeschlossen = 0; |
UDR = SendeBuffer[0]; |
} |
// -------------------------------------------------------------------------- |
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len) |
{ |
unsigned int pt = 0; |
unsigned char a,b,c; |
unsigned char ptr = 0; |
SendeBuffer[pt++] = '#'; // Startzeichen |
SendeBuffer[pt++] = modul; // Adresse (a=0; b=1,...) |
SendeBuffer[pt++] = cmd; // Commando |
while(len) |
{ |
if(len) { a = snd[ptr++]; len--;} else a = 0; |
if(len) { b = snd[ptr++]; len--;} else b = 0; |
if(len) { c = snd[ptr++]; len--;} else c = 0; |
SendeBuffer[pt++] = '=' + (a >> 2); |
SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4)); |
SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6)); |
SendeBuffer[pt++] = '=' + ( c & 0x3f); |
} |
AddCRC(pt); |
} |
// -------------------------------------------------------------------------- |
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max) // Wohin mit den Daten; Wie lang; Wo im RxdBuffer |
{ |
unsigned char a,b,c,d; |
unsigned char ptr = 0; |
unsigned char x,y,z; |
while(len) |
{ |
a = RxdBuffer[ptrIn++] - '='; |
b = RxdBuffer[ptrIn++] - '='; |
c = RxdBuffer[ptrIn++] - '='; |
d = RxdBuffer[ptrIn++] - '='; |
if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden |
x = (a << 2) | (b >> 4); |
y = ((b & 0x0f) << 4) | (c >> 2); |
z = ((c & 0x03) << 6) | d; |
if(len--) ptrOut[ptr++] = x; else break; |
if(len--) ptrOut[ptr++] = y; else break; |
if(len--) ptrOut[ptr++] = z; else break; |
} |
} |
// -------------------------------------------------------------------------- |
void BearbeiteRxDaten(void) |
{ |
if(!NeuerDatensatzEmpfangen) return; |
unsigned int tmp_int_arr1[1]; |
unsigned int tmp_int_arr2[2]; |
unsigned int tmp_int_arr3[3]; |
unsigned char tmp_char_arr2[2]; |
unsigned char tmp_char_arr3[3]; |
unsigned char tmp_char_arr4[4]; |
//if(!MotorenEin) |
PcZugriff = 255; |
switch(RxdBuffer[2]) |
{ |
case 'c':// Debugdaten incl. Externe IOs usw |
Decode64((unsigned char *) &DebugIn,sizeof(DebugIn),3,AnzahlEmpfangsBytes); |
/* for(unsigned char i=0; i<4;i++) |
{ |
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2], DebugIn.Analog[i]); |
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2 + 1], DebugIn.Analog[i] >> 8); |
}*/ |
//RemoteTasten |= DebugIn.RemoteTasten; |
DebugDataAnforderung = 1; |
break; |
case 'h':// x-1 Displayzeilen |
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes); |
RemoteTasten |= tmp_char_arr2[0]; |
DebugDisplayAnforderung = 1; |
break; |
case 't':// Motortest |
Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes); |
break; |
case 'v': // Version-Anforderung und Ausbaustufe |
GetVersionAnforderung = 1; |
break; |
case 'g':// "Get"-Anforderung für Debug-Daten |
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
DebugGetAnforderung = 1; |
break; |
case 'q':// "Get"-Anforderung für Settings |
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes); |
if(tmp_char_arr2[0] != 0xff) |
{ |
if(tmp_char_arr2[0] > 5) tmp_char_arr2[0] = 5; |
ReadParameterSet(tmp_char_arr2[0], (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
SendOutData('L' + tmp_char_arr2[0] -1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE); |
} |
else |
SendOutData('L' + GetActiveParamSetNumber()-1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE); |
break; |
case 'l': |
case 'm': |
case 'n': |
case 'o': |
case 'p': // Parametersatz speichern |
Decode64((unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE,3,AnzahlEmpfangsBytes); |
WriteParameterSet(RxdBuffer[2] - 'l' + 1, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], RxdBuffer[2] - 'l' + 1); // aktiven Datensatz merken |
Piep(GetActiveParamSetNumber()); |
break; |
} |
// DebugOut.AnzahlZyklen = Debug_Timer_Intervall; |
NeuerDatensatzEmpfangen = 0; |
} |
//############################################################################ |
//Routine für die Serielle Ausgabe |
int uart_putchar (char c) |
//############################################################################ |
{ |
if (c == '\n') |
uart_putchar('\r'); |
//Warten solange bis Zeichen gesendet wurde |
loop_until_bit_is_set(USR, UDRE); |
//Ausgabe des Zeichens |
UDR = c; |
return (0); |
} |
// -------------------------------------------------------------------------- |
void WriteProgramData(unsigned int pos, unsigned char wert) |
{ |
//if (ProgramLocation == IN_RAM) Buffer[pos] = wert; |
// else eeprom_write_byte(&EE_Buffer[pos], wert); |
// Buffer[pos] = wert; |
} |
//############################################################################ |
//INstallation der Seriellen Schnittstelle |
void UART_Init (void) |
//############################################################################ |
{ |
//Enable TXEN im Register UCR TX-Data Enable & RX Enable |
UCR=(1 << TXEN) | (1 << RXEN); |
// UART Double Speed (U2X) |
USR |= (1<<U2X); |
// RX-Interrupt Freigabe |
UCSRB |= (1<<RXCIE); |
// TX-Interrupt Freigabe |
UCSRB |= (1<<TXCIE); |
//Teiler wird gesetzt |
UBRR=(SYSCLK / (BAUD_RATE * 8L) - 1); |
//UBRR = 33; |
//öffnet einen Kanal für printf (STDOUT) |
//fdevopen (uart_putchar, 0); |
//sbi(PORTD,4); |
Debug_Timer = SetDelay(200); |
} |
//--------------------------------------------------------------------------------------------- |
void DatenUebertragung(void) |
{ |
static char dis_zeile = 0; |
if(!UebertragungAbgeschlossen) return; |
if(DebugGetAnforderung && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
{ |
SendOutData('G',MeineSlaveAdresse,(unsigned char *) &DebugIn,sizeof(DebugIn)); |
DebugGetAnforderung = 0; |
} |
if((CheckDelay(Debug_Timer) || DebugDataAnforderung) && UebertragungAbgeschlossen) |
{ |
SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut)); |
DebugDataAnforderung = 0; |
//Salvo 26.10.2007 Counter fuer Erkennung von fehlenden Daten per Bluetoothuebertragung |
dataset_cnt++; |
// Salvo End |
Debug_Timer = SetDelay(MIN_DEBUG_INTERVALL); |
} |
if(DebugDisplayAnforderung && UebertragungAbgeschlossen) |
{ |
Menu(); |
DebugDisplayAnforderung = 0; |
if(++dis_zeile == 4) |
{ |
SendOutData('4',0,&PPM_in,sizeof(PPM_in)); // DisplayZeile übertragen |
dis_zeile = -1; |
} |
else SendOutData('0' + dis_zeile,0,&DisplayBuff[20 * dis_zeile],20); // DisplayZeile übertragen |
} |
if(GetVersionAnforderung && UebertragungAbgeschlossen) |
{ |
SendOutData('V',MeineSlaveAdresse,(unsigned char *) &VersionInfo,sizeof(VersionInfo)); |
GetVersionAnforderung = 0; |
} |
} |
/branches/salvo_gps/Basis_v0067g/trunk/uart.h |
---|
0,0 → 1,92 |
#ifndef _UART_H |
#define _UART_H |
#define MAX_SENDE_BUFF 150 |
#define MAX_EMPFANGS_BUFF 150 |
//Salvo 26.10.2007 |
extern int dataset_cnt; |
// salvo End |
extern unsigned char DebugGetAnforderung; |
extern unsigned volatile char SendeBuffer[MAX_SENDE_BUFF]; |
extern unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF]; |
extern unsigned volatile char UebertragungAbgeschlossen; |
extern unsigned volatile char PC_DebugTimeout; |
extern unsigned volatile char NeueKoordinateEmpfangen; |
extern unsigned char MeineSlaveAdresse; |
extern unsigned char PcZugriff; |
extern int Debug_Timer; |
extern void UART_Init (void); |
extern int uart_putchar (char c); |
extern void boot_program_page (uint32_t page, uint8_t *buf); |
extern void DatenUebertragung(void); |
extern void DecodeNMEA(void); |
extern unsigned char MotorTest[4]; |
struct str_DebugOut |
{ |
unsigned char Digital[2]; |
unsigned int Analog[32]; // Debugwerte |
}; |
extern struct str_DebugOut DebugOut; |
struct str_Debug |
{ |
unsigned char Digital[2]; |
unsigned char RemoteTasten; |
unsigned int Analog[4]; |
}; |
extern struct str_Debug DebugIn; |
struct str_VersionInfo |
{ |
unsigned char Hauptversion; |
unsigned char Nebenversion; |
unsigned char PCKompatibel; |
unsigned char Rserved[7]; |
}; |
extern struct str_VersionInfo VersionInfo; |
//Die Baud_Rate der Seriellen Schnittstelle ist 9600 Baud |
//#define BAUD_RATE 9600 //Baud Rate für die Serielle Schnittstelle |
//#define BAUD_RATE 14400 //Baud Rate für die Serielle Schnittstelle |
//#define BAUD_RATE 28800 //Baud Rate für die Serielle Schnittstelle |
//#define BAUD_RATE 38400 //Baud Rate für die Serielle Schnittstelle |
#define BAUD_RATE 57600 //Baud Rate für die Serielle Schnittstelle |
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird |
#if defined (__AVR_ATmega128__) |
# define USR UCSR0A |
# define UCR UCSR0B |
# define UDR UDR0 |
# define UBRR UBRR0L |
# define EICR EICRB |
#endif |
#if defined (__AVR_ATmega32__) |
# define USR UCSRA |
# define UCR UCSRB |
# define UBRR UBRRL |
# define EICR EICRB |
# define INT_VEC_RX SIG_UART_RECV |
# define INT_VEC_TX SIG_UART_TRANS |
#endif |
#if defined (__AVR_ATmega644__) |
# define USR UCSR0A |
# define UCR UCSR0B |
# define UDR UDR0 |
# define UBRR UBRR0L |
# define EICR EICR0B |
# define TXEN TXEN0 |
# define RXEN RXEN0 |
# define RXCIE RXCIE0 |
# define TXCIE TXCIE0 |
# define U2X U2X0 |
# define UCSRB UCSR0B |
# define UDRE UDRE0 |
# define INT_VEC_RX SIG_USART_RECV |
# define INT_VEC_TX SIG_USART_TRANS |
#endif |
#endif //_UART_H |
/branches/salvo_gps/Basis_v0067g/trunk |
---|
Property changes: |
Added: svn:ignore |
+*.bak |