Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 660 → Rev 661

/branches/salvo_gps/Basis_v0067g/trunk/Flight-Ctrl_MEGA644_V0_06a.hex
0,0 → 1,2421
:100000000C946C020C9489020C9489020C94890261
:100010000C9489020C9489020C9489020C94890234
:100020000C9489020C94820C0C9489020C94890221
:100030000C949D150C9489020C9489020C948902ED
:100040000C9489020C9489020C94850B0C948902FF
:100050000C94AA070C9489020C94C5040C94890290
:100060000C94880D0C9489020C94D1140C94890280
: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
:1004E000DEBFCDBF14E0A0E0B1E0ECE8F3E902C06C
:1004F00005900D92A23AB107D9F719E0A2EAB4E04B
:1005000001C01D92A339B107E1F70E94C4020C9407
:10051000C5490C94000022E030E0D9010E94B149A5
:10052000802D863028F082E0D901082E0E94B9493A
:1005300090E00895FB01282F863008F025E0429FC7
:10054000D0011124AC59BF4F842F90E0019724F0C3
:1005500001900E94B949FACFA2E0B0E0022E0E94B9
:10056000B9490895FB01863008F085E0489FD00125
:100570001124AC59BF4F842F90E0019724F00E94C2
:10058000B1490192FACF0895EF92FF921F93CF9352
:10059000DF9314B815B8189B02C08BE001C08AE045
:1005A000809300018DEC87B98FEF88B98BE184B916
:1005B00081E085B98EE38AB9579A87EF8BB984B702
:1005C000877F84BF80916000886180936000109273
:1005D000600080ED97E09093C5048093C40410926E
:1005E000640510926305109243081092420810921D
:1005F0006205109261051092600510925F0580916E
:1006000000018A3011F4289801C0289A0E94250D13
:100610000E94FD050E9488150E94820D0E94B71459
:1006200078941092410786E08093420787E0809398
:10063000430720910001822F6AE00E940A49492F56
:1006400050E0822F0E940A4990E021E630E03F937B
:100650002F9326E030E03F932F931F921F925F93DA
:100660004F939F938F938CE391E09F938F931F926F
:100670000E94E1088BE191E09F938F931F920E946B
:10068000E108299AA1E0B0E00E94B149802D2DB780
:100690003EB7205F3F4F0FB6F8943EBF0FBE2DBF51
:1006A0008434A9F18CEE90E09F938F931F920E9467
:1006B000E1080E94CB23C0E0D0E00F900F900F9094
:1006C0008CE6E82E88E0F82E1C2FC23039F0C330BB
:1006D00019F40E94AA2204C0C43010F00E943A23E8
:1006E00047E4B701812F0E949A022196C630D105B6
:1006F00059F783E022E030E0D901082E0E94B94981
:1007000084E421503040D901082E0E94B949C4E048
:10071000D0E0DE010E94B149802D853050F083ED9C
:1007200090E09F938F931F920E94E1080F900F908B
:100730000F902297DE010E94B149802D863028F06B
:1007400082E0DE01082E0E94B94947E46CE678E0B9
:100750000E94B202DE010E94B149802D863028F04D
:1007600082E0DE01082E0E94B94990E09F938F93AA
:1007700088EB90E09F938F931F920E94E1088091F5
:1007800074080F900F900F900F900F9080FD03C092
:10079000C8EED3E020C08BE990E09F938F931F9227
:1007A0000E94E10888EE93E00E946D0CEC010E942B
:1007B00020100F900F900F90CE010E94760C88238E
:1007C000D9F386E990E09F938F931F920E94E108EE
:1007D0000F900F900F900E941C21809100018A3091
:1007E00011F4289801C0289A469880ED97E09093DC
:1007F000C5048093C40488EE93E090933C078093F3
:100800003B0785E58093360788E890E09F938F93B8
:100810001F920E94E108809174080F900F900F9032
:1008200082FF03C08CE790E002C084E790E09F93D2
:100830008F931F920E94E1080F900F900F9080E716
:1008400090E09F938F931F920E94E1080E9469108D
:1008500088E893E190938603809385030F900F902F
:100860000F908091C104882309F462C01092C104E2
:100870000E945D240E94D520209100012A3011F4AD
:10088000289801C0289A80910301882321F0815083
:100890008093030110C01092B2041092B30410921E
:1008A0007F0510927E0510928105109280051092AE
:1008B00083051092820580915E05882329F080913E
:1008C0005E05815080935E0580918503909186033B
:1008D000892B01F585E090E0909386038093850352
:1008E0000E94621580910403909105038F5F9F4FD2
:1008F000F9F4809165058823D9F080E197E290931F
:10090000C5048093C40480E890E09093050380932D
:1009100004030EC080918503909186030197909304
:100920008603809385032A3011F4289801C0289A01
:100930000E9418060E94B106CE010E94760C882300
:1009400009F48FCF20910803309109038091840826
:1009500090E0281739079CF48091040390910503D7
:100960008F5F9F4F61F480E797E19093C504809378
:10097000C40480E093E0909305038093040384E62D
:1009800090E00E946D0CEC016CCF1F920F920FB69D
:100990000F9211248F939F93EF93FF938091010106
:1009A0008823E1F48091BD049091BE040196909358
:1009B000BE048093BD04FC01E85FF94FE081ED3097
:1009C00019F08639910539F41092BE041092BD04D5
:1009D00081E080930101E093C60004C01092BE0440
:1009E0001092BD04FF91EF919F918F910F900FBED8
:1009F0000F901F901895DC0120E030E040E050E0BF
:100A000008C0FA01E85FF94F8081280F311D4F5F60
:100A10005F4F4A175B07A9F73F70C90136E096950B
:100A200087953A95E1F7835CFD01E85FF94F808394
:100A300011962F73235CFD01E85FF94F2083A75FB8
:100A4000B94F8DE08C93109201018091080680933C
:100A5000C60008951F93CF93DF93EA01722F93E2AC
:100A6000909308066093090680930A06A3E0B0E01D
:100A700060E04FC0FE01E60FF11D90816F5F715085
:100A800019F410E040E00FC0FE01E60FF11D4081B7
:100A90006F5F715011F410E006C0FE01E60FF11D0A
:100AA00010816F5F7150892F86958695835CFD015B
:100AB000E85FF94F808350E09A0184E036952795EE
:100AC0008A95E1F7892F90E083709070F4E0880FA9
:100AD000991FFA95E1F7282B235CFD01E75FF94F99
:100AE0002083812F82958695869583704F705070F4
:100AF000440F551F440F551F842B835CFD01E65F97
:100B0000F94F80831F73135CFD01E55FF94F10837C
:100B10001496772309F0AECFCD010E94FB04DF913C
:100B2000CF911F9108951F93CF93DF93EC0170E055
:100B3000A22FB0E0129748C0E42FF0E0E55BF84F39
:100B400030814F5FE42FF0E0E55BF84F50814F5F5D
:100B5000E42FF0E0E55BF84F10814F5FE42FF0E009
:100B6000E55BF84F20814F5F842F90E0A817B9070D
:100B700074F15D53FE01E70FF11D852F82958F7093
:100B80003D53330F330F382B3083613001F1912FF8
:100B90009D537F5FFE01E70FF11D71505295507F0D
:100BA000892F86958695582B508363506F3F79F037
:100BB0007E5FFE01E70FF11D9295990F990F907CD2
:100BC0002D53922B90837F5F662309F0B5CFDF9181
:100BD000CF911F9108951F93182F8A3019F48DE03B
:100BE0000E94EB058091C00085FFFCCF1093C600EA
:100BF00080E090E01F9108950895E1ECF0E088E135
:100C00008083A0ECB0E08C9182608C9380818068BE
:100C100080838081806480838AE28093C40088EC32
:100C200090E00E946D0C90933507809334070895EF
:100C300080910101882309F493C08091A204882344
:100C400071F080910101882351F0609107062BE03B
:100C500046E357E087E40E942A051092A20480919F
:100C60003407909135070E94760C882321F48091F7
:100C7000A4048823F9F0809101018823D9F06091C0
:100C8000070622E441EE57E084E40E942A05109210
:100C9000A4048091B5049091B60401969093B60493
:100CA0008093B5048AEF90E00E946D0C9093350715
:100CB00080933407609102016F3F89F0462F50E026
:100CC00094E0440F551F9A95E1F74C5F5E4F605DCD
:100CD00020E181E40E942A058FEF80930201809138
:100CE000A304882359F180910101882339F10E94DE
:100CF00072101092A3043091AC04932F9F5F9093D5
:100D0000AC04943021F08091AD04882359F026E1A1
:100D10004EE358E060E084E30E942A058FEF809361
:100D2000AC040CC044E1949FA0011124465E5C4FCA
:100D300024E160E0832F8F5C0E942A058091A50446
:100D4000882371F080910101882351F0609107069A
:100D50002AE041E457E086E50E942A051092A504A6
:100D600008951F93CF93DF93CDB7DEB722970FB6C9
:100D7000F894DEBF0FBECDBF8091A704882309F48D
:100D8000DFC08FEF8093030180914D078B3609F40C
:100D90005EC08C3678F4833629F1843620F48136AF
:100DA00009F0CCC013C0873609F45EC0883609F05C
:100DB000C5C02BC0813709F45BC0813708F480C0FF
:100DC0008437F1F1863709F0B9C04AC02091AA04EE
:100DD00043E062E0CE0101960E94930589818093F1
:100DE0000201ACC02091AA0443E06BE086E397E0E7
:100DF0000E9493058091F10490913807892B80938C
:100E0000F10481E08093A40499C02091AA0443E0F6
:100E100062E0CE0101960E9493058091F1049981D0
:100E2000892B8093F1048A818F3F21F481E08093A4
:100E3000AD0402C01092AD0481E08093A3047EC093
:100E40002091AA0443E064E08EEA94E006C0209179
:100E5000AA0443E063E082EB94E00E9493056EC035
:100E600081E08093A5046AC081E08093A20466C0FB
:100E70002091AA0443E062E0CE0101960E9493050E
:100E800089818F3F89F0863010F085E0898347E4BF
:100E90006CE678E089810E94B20260910706898140
:100EA00027E44CE658E008C0109107060E948B0228
:100EB00027E44CE658E0612F855B0E942A053EC07E
:100EC0002091AA0443E067E48CE698E00E94930531
:100ED00080914D0747E46CE678E08B560E949A02B9
:100EE00080914D078B56A2E0B0E0082E0E94B949D0
:100EF0006091970870E080E090E024EC39E040E0F9
:100F000050E00E94EB4860938703709388038093BE
:100F1000890390938A036091980870E080E090E0E4
:100F20000E94EB4860938B0370938C0380938D0336
:100F300090938E030E948B020E94C0201092A704FF
:100F400022960FB6F894DEBF0FBECDBFDF91CF91D2
:100F50001F9108951F920F920FB60F9211242F9395
:100F60003F934F935F936F937F938F939F93AF9331
:100F7000BF93CF93DF93EF93FF938091C60080934D
:100F8000A6048091A6040E94E43B4091B80446392F
:100F900010F01092B7048091A6048D3009F05DC066
:100FA0008091B704823009F058C01092B704A42F82
:100FB000B0E0FD01E75BF84F3081ED01C65BD84F33
:100FC00028818091BB049091BC04831B9109821BF2
:100FD00091099F709093BC048093BB049C0168941A
:100FE00015F8369527951694E1F7235C2093BA04FB
:100FF000982F9F73935C9093B9048081281729F4EC
:101000008881981711F491E006C08091A9048F5F40
:101010008093A90490E08091A704882309F065C01B
:10102000992309F462C081E08093A7044093AA0445
:10103000A55BB84F8DE08C9380914D07823509F008
:1010400054C088E190E02CE00FB6F894A895809306
:1010500060000FBE2093600048C08091B7048130CB
:10106000D9F0813018F08230F1F521C08091A604CA
:10107000833239F48091A704882319F481E08093A6
:10108000B7048091A60480934B0781E08093B80455
:101090008091A60490E022C082E08093B704E42F00
:1010A000F0E08091A604E55BF84F808309C0E42F4F
:1010B000F0E08091A604E55BF84F8083463920F488
:1010C0004F5F4093B80402C01092B7042091A60469
:1010D0008091BB049091BC04820F911D9093BC043D
:1010E0008093BB0402C01092B704FF91EF91DF918F
:1010F000CF91BF91AF919F918F917F916F915F91B0
:101100004F913F912F910F900FBE0F901F90189508
:10111000982F80912308813069F48091F004E82FA2
:10112000F0E0E65EFC4F90838F5F8093F00421E057
:1011300030E005C0892F0E94EB05282F30E0C9015F
:1011400008951F93182F04C080E30E94880811504F
:101150001116D4F31F9108951F93182F04C080E235
:101160000E94880811501116D4F31F9108950F930F
:101170001F93CF93DF938C01EB0108C0F8010F5F41
:101180001F4FE4918E2F0E94880821972097B1F776
:10119000DF91CF911F910F9108950F931F93CF93DC
:1011A000DF938C01EB0106C0F80181918F010E9451
:1011B000880821972097C1F7DF91CF911F910F9158
:1011C00008952F923F924F925F926F927F928F92EB
:1011D0009F92AF92BF92CF92DF92EF92FF920F93C6
:1011E0001F93CF93DF93CDB7DEB7E5970FB6F89493
:1011F000DEBF0FBECDBF2B968FAD2B9780932308FC
:10120000CE01835B9F4F9B838A832D964EAC5FAC50
:101210002D971EA61FA618AA19AA9E01225D3F4F50
:101220003DAB2CAB820102C00F5F1F4FF801F49061
:10123000FF2019F0F5E2FF16B9F7B8016419750936
:1012400019F0C2010E94B708FF2009F445C2280125
:101250000894411C511C1982AA81BB8133241BAA0A
:101260002FEF2AABF2010894411C511CB490632D5E
:1012700070E06170707035E7B31621F08B2D8062DD
:101280008837C9F46115710559F02D913D914D9143
:101290005C9113972EA73FA748AB59AB14960BC090
:1012A0008D919C9111979C0140E050E02EA73FA7A3
:1012B00048AB59AB129630E2B31621F489818823EA
:1012C00089F61CC043E2B41611F458E055C08AE216
:1012D000B81621F09DE2B91671F408C0FD0112960E
:1012E000E081EBABE7FFBECFE195EBABE0E13E2A5F
:1012F000FFED3F22B7CF2BE2B21611F4B982B2CF85
:101300003EE2B31699F5F2010894411C511C8491F8
:101310008A3221F0B82E20E030E01DC0FD01129687
:101320004081518157FF02C04FEF5FEF4AAB9ACF28
:10133000C90153E0880F991F5A95E1F7220F331F17
:10134000280F391F2B0D311D20533040F201089416
:10135000411C511CB4908B2D80538A3048F3A90155
:1013600037FF02C04FEF5FEF4AAB85CF40E3B416C3
:1013700029F434FC77CF50E2352A74CF8B2D81537A
:101380008930D8F420E030E0C90103E0880F991FCC
:101390000A95E1F7220F331F280F391F2B0D311D3E
:1013A00020533040F2010894411C511CB4908B2D05
:1013B00080538A3048F32BAB5ECF88E6B81619F419
:1013C00094E0392A4FCFECE6BE1619F4F1E03F2A3B
:1013D00049CFBB83AA8323E6B21639F41296BB83A6
:1013E000AA8312978C918E8322C134E4B31639F00C
:1013F00044E6B41631F059E6B516A9F502C081E00D
:10140000382A30FE08C01496BB83AA835E914E91A1
:101410003E912E910AC01296BB83AA839E918E9113
:101420009C01442737FD4095542F2EA73FA748AB7A
:1014300059AB8EA59FA5A8A9B9A9BB238CF42EA54D
:101440003FA548A959A950954095309521953F4F02
:101450004F4F5F4F2EA73FA748AB59AB8DE2898313
:10146000BAE02B2E80C03FE4B31621F04FE6B4164D
:1014700031F402C051E0352AA8E02A2E73C080E77B
:10148000B81689F41296BB83AA839E918E919C0113
:1014900040E050E02EA73FA748AB59AB30E4332AD9
:1014A000F8E7BF2E5DC043E7B416D1F51296BB83B3
:1014B000AA83DE90CE90C114D10489F488E28E8391
:1014C0008EE68F8385E788878CE689878A8789E21D
:1014D0008B871C86E6E0CE2ED12CCC0EDD1E5AA9C1
:1014E00057FD14C0452F552747FD509560E070E02B
:1014F000C6010E94C346009711F4FAA80EC0F82E48
:10150000FC188AA98F154CF4F82E07C0F60101903B
:101510000020E9F73197FE2EFC18198240E090C0B8
:1015200095E5B91621F0A5E7BA1631F402C0B1E08D
:101530003B2A7AE0272E16C0E8E5BE1621F0F8E730
:10154000BF1609F070C033FE0BC02EA53FA548A9F9
:1015500059A9211531054105510511F030E4332A0F
:1015600060E1262E19824AA947FD02C05FED3522AF
:101570008EA59FA5A8A9B9A90097A105B10549F411
:101580009AA9992331F45EE2C52ED12CCC0EDD1E32
:1015900046C06EA47FA488A899A84EE2C42ED12C80
:1015A000CC0EDD1EE22CFF2400E010E06EA57FA52E
:1015B00088A999A9A80197010E943D496A3020F4A1
:1015C00030E3A32EA60E08C027E5A22EA60EA8E59E
:1015D000BA1611F4BFEDAB22F601A2926F016EA50F
:1015E0007FA588A999A9A80197010E943D492EA726
:1015F0003FA748AB59AB6E147F048006910618F0E4
:1016000039014A01D3CFF8E02F1649F433FE07C061
:1016100020E3A21621F080E3D6018E936D01FCA891
:10162000FC184AA90DC0BB2009F456C0BE8219821D
:1016300096E0C92ED12CCC0EDD1E40E0FF24F394A1
:10164000E42EEF18E7FCEE248981882319F08F2D12
:101650008F5F06C036FC02C08F2D02C08F2D8E5FBB
:10166000A82EAE0C032D10E080E3882E912C802252
:1016700091228114910421F48BA98A190E94AC084B
:101680008981882329F061E070E0CE01019609C0CC
:1016900006FF09C080E38C83BD8262E070E0CE016A
:1016A00004960E94CD08B0E28B16910421F48BA918
:1016B0008A190E94A1088E2D0E94A1086F2D7727FC
:1016C00067FD7095C6010E94CD0804FFABCD8BA9C4
:1016D0008A190E94AC08A6CDE5960FB6F894DEBF35
:1016E0000FBECDBFDF91CF911F910F91FF90EF9073
:1016F000DF90CF90BF90AF909F908F907F906F9032
:101700005F904F903F902F9008951F920F920FB6C9
:101710000F9211242F933F935F936F937F938F9337
:101720009F93AF93BF938091CD0481508093CD045C
:101730008F3F11F58091CB049091CC04009729F054
:1017400001979093CC048093CB0489E08093CD04DF
:10175000809107038F5F817080930703882319F4BA
:1017600081E08093C1048091BF049091C0040196F0
:101770009093C0048093BF048091C4049091C504E9
:101780000297B8F08091C4049091C504019790939A
:10179000C5048093C4048091C4049091C504209131
:1017A00004033091050382239323892B09F081C020
:1017B00006C08FEF9FEF9093050380930403809101
:1017C00000018A3039F404C05A9A05C0479A03C010
:1017D0005A9801C04798349B0AC08091C2049091E6
:1017E000C30401969093C3048093C20468C080919F
:1017F000C2049091C304892B09F43DC08091C204B6
:101800009091C304805A9F40B0F58FEF90E0909381
:10181000CC048093CB042091C2043091C304809106
:10182000770590E0880F991F281B390B30934B05E3
:1018300020934A0580914A0590914B0597FF0AC075
:1018400080914A0590914B0588599E4F90934B0586
:1018500080934A0580914A0590914B0588569140A6
:1018600054F080914A0590914B0588569140909391
:101870004B0580934A0580914A0590914B05209134
:101880004C0530914D05845E9D4F821B930B68E69D
:1018900071E00E942A49845B904090934F058093A9
:1018A0004E0581E08093C8041092C3041092C204D4
:1018B00006C0809100018A3009F088CF85CFBF91A2
:1018C000AF919F918F917F916F915F913F912F91F8
:1018D0000F900FBE0F901F9018952091BF0430916C
:1018E000C0042F5F3F4F820F931F08952091BF04C4
:1018F0003091C004821B930B892F992786958074A1
:1019000090E008951F920F920FB60F9211241F932B
:101910002F933F934F935F936F937F938F939F93F7
:10192000AF93BF93CF93DF93EF93FF938091060321
:101930008150809306038F3F09F06FC083E8809346
:10194000B00080919C03C82FD0E0D093C704C0930F
:10195000C6048091A10810918E0880FF1FC060917D
:101960000E0570910F05809110059091110520E8EA
:1019700030E040E050E00E945F49CA01B901212FE8
:1019800030E040E050E00E94EB4820E032E040E0F0
:1019900050E00E945F49C20FD31F1EC060910E0528
:1019A00070910F05809110059091110520E830E0AD
:1019B00040E050E00E945F49CA01B901212F30E0A8
:1019C00040E050E00E94EB4820E032E040E050E090
:1019D0000E945F49C21BD30BD093C704C093C604B7
:1019E0002091C6043091C70480918F0890E0281799
:1019F000390734F08091900890E08217930724F41F
:101A00009093C7048093C6048091C6048093B3006A
:101A1000809191088093060304C083E08093B00016
:101A20005F98FF91EF91DF91CF91BF91AF919F911F
:101A30008F917F916F915F914F913F912F911F9166
:101A40000F900FBE0F901F9018958091BF0490913A
:101A5000C0040B969093CF048093CE0482E085BDA2
:101A600083EA84BD17BC88E788BD96E096BD83EC09
:101A70008093B0009093B100E0E7F0E08081826055
:101A80008083EEE6F0E08081816080838AE080934D
:101A9000B3001092B2000895AC012091BF043091C0
:101AA000C0042F5F3F4F03C08FEE80937A00809178
:101AB000BF049091C004B901681B790BCB01840F5E
:101AC000951F80709078892F99278695882361F3D8
:101AD0000895AC012091BF043091C0042F5F3F4FA7
:101AE0008091BF049091C004B901681B790BCB01B0
:101AF000840F951F80709078892F99278695882369
:101B000079F3089510927C008FEE80937A00089507
:101B10001F920F920FB60F921124EF92FF920F9324
:101B20001F932F933F934F935F936F937F938F9365
:101B30009F93AF93BF93CF93DF93EF93FF93109255
:101B40007A008091EC048F5F8093EC0481508530A3
:101B500009F486C0863090F4823009F440C08330A6
:101B600030F48823F1F0813009F044C22FC0833073
:101B700009F441C0843009F03DC25AC0883009F4EC
:101B8000C2C0893038F4863009F483C0873009F048
:101B900031C29CC0893009F4D3C08A3009F02AC20E
:101BA000B1C180917800909179009093EB0480937B
:101BB000EA0481E08093ED048091E4049091E504CF
:101BC00001969093E5048093E40418C28091780014
:101BD000909179009093E9048093E80492C08091F9
:101BE0007800909179009093E7048093E60484E074
:101BF0008093ED0403C24091080350910903809142
:101C00007800909179009A01220F331F240F351F1D
:101C100063E070E00E941649260F371F369527951E
:101C200036952795309309032093080386E0E0CF8B
:101C300080910605909107052091780030917900F8
:101C4000821B930B9093250880932408809124088D
:101C5000909125089093D7048093D60487E0C8CF4D
:101C600080917800909179002091040530910505CC
:101C7000821B930B9093300880932F0880912F083C
:101C8000909130089093D9048093D8041092ED0479
:101C9000B5C1809100012091EA043091EB048A30B3
:101CA00049F48091780090917900820F931F969566
:101CB000879506C08091780090917900820F931FDC
:101CC0009093D5048093D40481E092CF8091000159
:101CD0002091E8043091E9048A3049F48091780039
:101CE00090917900820F931F9695879506C08091F9
:101CF000780090917900820F931F9093D304809382
:101D0000D20482E075CF809100012091E6043091E9
:101D1000E7048A3049F48091780090917900820F2D
:101D2000931F9695879506C08091780090917900D1
:101D3000820F931F9093D1048093D00485E058CFF5
:101D40006091780070917900E0900805F0900905A5
:101D500000910A0510910B05882777FD8095982F33
:101D60000E94D047A80197010E94D0460E949D473B
:101D70007093DB046093DA04E091DA04F091DB0401
:101D80008091240890912508C0912F08D0913008A7
:101D900097FF03C0909581959F4F64E070E00E948B
:101DA0002A499B01CE01D7FF03C0909581959F4F93
:101DB00064E070E00E942A49260F371FE20FF31FEC
:101DC000F093DB04E093DA048091DA049091DB0471
:101DD000029704F1609108057091090580910A0548
:101DE00090910B0520E030E048E454E40E940B4859
:101DF00088230CF03CC06091080570910905809122
:101E00000A0590910B052AE037ED43EA5CE30E9456
:101E1000D14625C08091DA049091DB048F5F9F4FFB
:101E200034F5609108057091090580910A0590913B
:101E30000B0520E030E046E154E40E940F481816FC
:101E4000B4F4609108057091090580910A0590919C
:101E50000B052AE037ED43EA5CE30E94D04660932D
:101E600008057093090580930A0590930B0581E09E
:101E70008093E104809178009091790090932708F5
:101E800080932608209146053091470540914805EA
:101E9000509149058091DA049091DB04AA2797FDBF
:101EA000A095BA2F820F931FA41FB51F80934605DC
:101EB00090934705A0934805B0934905E0904605E7
:101EC000F09047050091480510914905609146053D
:101ED00070914705809148059091490520E034E0D4
:101EE00040E050E00E945F49E21AF30A040B150B30
:101EF000E0924605F0924705009348051093490586
:101F000083E076CE80913408909135082091780056
:101F100030917900820F931F909335088093340895
:101F200080912C088F5F80932C0880912C0885303D
:101F300008F460C0809178009091790090930F032D
:101F400080930E0310922C08809128089091290804
:101F50002091340830913508821B930B209166053F
:101F600030916705821B930B9093E3048093E20406
:101F70002091340830913508E0900A03F0900B036B
:101F800000910C0310910D03C801B701660F771F74
:101F9000881F991F6E0D7F1D801F911F442737FDDD
:101FA0004095542F620F731F841F951F24E030E06B
:101FB00040E050E00E945F4920930A0330930B03F6
:101FC00040930C0350930D03209128083091290869
:101FD00080910A0390910B03A0910C03B0910D0323
:101FE000281B390B3093670520936605109235083E
:101FF000109234081092ED041092EC048091ED04DC
:1020000080937C008091EC04882319F08FEE8093FC
:102010007A00FF91EF91DF91CF91BF91AF919F91A6
:102020008F917F916F915F914F913F912F911F9170
:102030000F91FF90EF900F900FBE0F901F9018958B
:102040000F931F93CF93DF93A3E0B0E00E94B149B9
:10205000802DC82FD0E0C531D10508F02A97C7BD23
:1020600084E690E00E944C0D80910E0390910F0346
:1020700082559340C8F4C0E0D0E016C0C7BD82E3EB
:1020800090E00E944C0D1F930F931F920E94E10855
:1020900080910E0390910F030F900F900F90845832
:1020A000934038F0219602C000E711E0CA3FD10505
:1020B00028F3A3E0B0E00C2E0E94B949C093310888
:1020C0008CE291E00E944C0DDF91CF911F910F9116
:1020D0000895EAE1F3E080E2819383E0EA36F807CD
:1020E000D1F708950F931F938091F104282F30E0CA
:1020F000C90181709070682F8823A9F08091F20443
:10210000882311F0815002C080916A038093F20409
:10211000EAE1F3E080E2819383E0EA36F807D1F761
:102120008FEF8093AC04A9014270507021FF10C062
:102130008091F2048F5F8093F204EAE1F3E080E2A1
:10214000819393E0EA36F907D1F78FEF8093AC04DF
:10215000662321F0452B11F01092F20481E1809367
:10216000F0048091F20490E09F938F938CE194E0CF
:102170009F938F9301E00F930E94E1081091F20466
:102180000F900F900F900F900F90153009F4FCC135
:10219000163090F4123009F4CCC0133030F411230F
:1021A000F1F0113009F0D9C361C0133009F416C140
:1021B000143009F0D2C365C1183009F416C31930C0
:1021C00038F4163009F499C2173009F0C6C3EAC2D0
:1021D000193009F447C31A3009F0BFC381C3109204
:1021E000F0048AE094E09F938F930F930E94E1089C
:1021F00084E18093F00420910001822F6AE00E9424
:102200000A49492F50E0822F0E940A4990E021E6B6
:1022100030E03F932F9326E030E03F932F931F92BF
:102220001F925F934F939F938F9385EF93E09F93BC
:102230008F930F930E94E10888E28093F0040E943C
:102240008B0290E09F938F9388EE93E09F938F9300
:102250000F930E94E1088CE38093F00488ED93E0F3
:102260009F938F930F930E94E10898C28091740806
:1022700080FF47C01092F004809166059091670539
:102280009F938F9389EC93E09F938F931F930E946A
:10229000E10884E18093F0048091680590916905DC
:1022A0009F938F938AEB93E09F938F931F930E944A
:1022B000E10888E28093F00480910E0390910F036F
:1022C0009F938F938BEA93E09F938F931F930E942A
:1022D000E1088CE38093F0048091310890E09F93B3
:1022E0008F938CE993E09F938F931F930E94E10853
:1022F0008DB79EB744960FB6F8949EBF0FBE8DBFA4
:1023000031C384E18093F00485E993E09F938F9338
:102310001F930E94E10888E28093F00487E893E02D
:102320009F938F931F930E94E1088DB79EB70696E7
:10233000E2CF1092F0048DE793E09F938F930F9379
:102340000E94E10884E18093F00460910E05709191
:102350000F05809110059091110520E034E040E0D8
:1023600050E00E945F495F934F933F932F938EE617
:1023700093E09F938F930F930E94E10888E28093EC
:10238000F0046091160570911705809118059091E1
:10239000190520E034E040E050E00E945F495F937F
:1023A0004F933F932F938FE593E09F938F930F93DA
:1023B0000E94E1088CE38093F00480914A0590919B
:1023C0004B059F938F9380E593E09F938F930F939B
:1023D0000E94E1088DB79EB746968DCF1092F0040B
:1023E0008091420890914308209140083091410823
:1023F0009F938F933F932F9380E493E09F938F93CA
:102400000F930E94E10884E18093F00480914608D4
:102410009091470820914408309145089F938F93ED
:102420003F932F9380E393E09F938F930F930E94AA
:10243000E10888E28093F00480914A0890914B086B
:1024400020914808309149089F938F933F932F9391
:1024500080E293E09F938F930F930E94E1088CE3B7
:102460008093F00480914E0890914F0820914C0881
:1024700030914D089F938F933F932F9380E193E08A
:102480007AC01092F004E0916D08F0E0EE0FFF1FAB
:10249000E25CF74F20813181E0916C08F0E0EE0FB3
:1024A000FF1FE25CF74F808191813F932F939F93B1
:1024B0008F9380E093E09F938F930F930E94E108A6
:1024C00084E18093F004E0916F08F0E0EE0FFF1FCD
:1024D000E25CF74F20813181E0916E08F0E0EE0F71
:1024E000FF1FE25CF74F808191813F932F939F9371
:1024F0008F9380EF92E09F938F930F930E94E10858
:1025000088E28093F004E0917108F0E0EE0FFF1F85
:10251000E25CF74F20813181E0917008F0E0EE0F2E
:10252000FF1FE25CF74F808191813F932F939F9330
:102530008F9380EE92E09F938F930F930E94E10818
:102540008CE38093F004E0917308F0E0EE0FFF1F3E
:10255000E25CF74F20813181E0917208F0E0EE0FEC
:10256000FF1FE25CF74F808191813F932F939F93F0
:102570008F9380ED92E09F938F930F930E94E108D9
:102580008DB79EB74C96B7CE1092F00482EC92E0D5
:102590009F938F930F930E94E1080F900F900F90DD
:1025A000809100018A3009F04AC084E18093F004F0
:1025B0004091FA045091FB048091D0049091D10491
:1025C0002091FA043091FB04821B930B5F934F938D
:1025D0009F938F9383EB92E09F938F930F930E942F
:1025E000E10888E28093F0044091FC045091FD04DE
:1025F0008091D2049091D3042091FC043091FD0489
:10260000821B930B5F934F939F938F9384EA92E087
:102610009F938F930F930E94E1088CE38093F004C3
:102620008091FE049091FF042091F3083091F4080A
:102630009F938F933F932F9385E992E055C084E158
:102640008093F0048091FA049091FB0462E070E0C2
:102650000E942A498091D0049091D1042091FA04DB
:102660003091FB04821B930B7F936F939F938F9307
:1026700086E892E09F938F930F930E94E10888E28F
:102680008093F0048091FC049091FD0462E070E07E
:102690000E942A498091D2049091D3042091FC0495
:1026A0003091FD04821B930B7F936F939F938F93C5
:1026B00087E792E09F938F930F930E94E1088CE34A
:1026C0008093F0048091FE049091FF0462E070E03A
:1026D0000E942A498091F3089091F4087F936F93A8
:1026E0009F938F9388E692E09F938F930F930E941E
:1026F000E1088DB79EB74596FECD1092F0048BE5AC
:1027000092E09F938F930F930E94E10884E180935E
:10271000F00480910405909105052091D804309132
:10272000D9049F938F933F932F938CE492E09F93D0
:102730008F930F930E94E10888E28093F0048091C8
:102740000605909107052091D6043091D7049F93F8
:102750008F933F932F938DE392E09F938F930F93EB
:102760000E94E1088CE38093F00460910805709169
:10277000090580910A0590910B050E949D472091C3
:10278000C7083091C8087F936F933F932F938EE2D1
:1027900092E09F938F930F930E94E1088DB79EB7AD
:1027A0004896A9CD84E18093F0048091080390912C
:1027B00009039F938F938FE192E09F938F930F93E1
:1027C0000E94E10888E28093F00480915E0590E029
:1027D0009F938F9380E192E09F938F930F930E943A
:1027E000E1088DB79EB70A9686CD1092F00481E07D
:1027F00092E09F938F930F930E94E10884E180936E
:10280000F00480914E0590914F059F938F9382EF36
:1028100091E09F938F930F930E94E10888E2809349
:10282000F00480914A0590914B059F938F9383EE1E
:1028300091E09F938F930F930E94E1088CE3809324
:10284000F00480914C0590914D059F938F9384EDFA
:1028500091E09F938F930F930E94E1088DB79EB7ED
:10286000429649CD1092F0048091560590915705FB
:102870009F938F9388EC91E09F938F930F930E9487
:10288000E10884E18093F004809158059091590506
:102890009F938F938CEB91E09F938F930F930E9464
:1028A000E10888E28093F00480915A0590915B05DD
:1028B0009F938F9380EB91E09F938F930F930E9450
:1028C000E1088CE38093F00480915C0590915D05B4
:1028D0009F938F9384EA91E09F938F930F9306CDFC
:1028E0001092F0048CE991E09F938F930F930E94D4
:1028F000E10884E18093F00480919C0390E09F9331
:102900008F938EE891E09F938F930F930E94E1083D
:1029100088E28093F0048091C6049091C7049F934D
:102920008F9380E891E09F938F930F930E94E1082B
:102930008CE38093F0042091900830E080918F0820
:1029400090E03F932F939F938F9382E791E09F9323
:102950008F930F930E94E108CBCC115010936A0320
:102960001092F2041092F1041F910F9108951092A9
:10297000B9008AE28093B800089585EA8093BC008C
:1029800080E090E0089584E98093BC00089510925F
:10299000B9008093BB0085E88093BC0080E090E0A4
:1029A00008951F920F920FB60F9211248F939F9349
:1029B000EF93FF938091F3048F5F8093F304815032
:1029C0008330C1F1843028F4813091F0823020F5D9
:1029D0000AC08530B9F18530E8F18630D9F1873009
:1029E00009F062C046C08091F404880F8E5A0CC072
:1029F0008091F4048F5F8093F40481502DC0833064
:102A000009F052C08091EB081092B9008093BB008E
:102A100085E88093BC0048C084E98093BC00809125
:102A2000F404843018F41092F30402C01092F404F9
:102A300085EAEFCF8091F504880F8D5AE5CF82307B
:102A4000A9F0DDCF8091BB00E091F504F0E0EA5CF5
:102A5000F74F80838091F504813029F0813078F739
:102A60008091B608D1CF8091BB08CECF8091DF088E
:102A7000CBCF8091F5049091BB00E82FF0E0EA5CA9
:102A8000F74F94838F5F8093F504843010F0109299
:102A9000F50484E98093BC008AE090E0909386037B
:102AA000809385031092F3048091BC00806880932A
:102AB000BC00FF91EF919F918F910F900FBE0F90EF
:102AC0001F9018954CEB50E084E9DA018C9310923A
:102AD000F3042BEB30E0F90180811092F40480E8DC
:102AE0008C931092BD001092BA001082E9EBF0E0D6
:102AF0001082A8EBB0E01C9210828AE28C9385EAE7
:102B0000DA018C931082F901108285E88C93089584
:102B100083EC80938100EFE6F0E080818062808327
:102B20001092FF041092FE041092FD041092FC0417
:102B30001092FB041092FA0408951F920F920FB6A0
:102B40000F9211240F931F932F933F934F935F93F3
:102B50006F937F938F939F93AF93BF93CF93DF93A5
:102B6000EF93FF9320918600309187008091F804C5
:102B70009091F904281B390B809186009091870071
:102B80009093F9048093F804C9018D549440C09146
:102B9000F604D091F704835F9A4158F4249714F017
:102BA00010926B0381E090E09093F7048093F60419
:102BB00062C0CA30D1050CF05EC0C9018B5F904085
:102BC000845B914008F040C0A901425D5140FE0184
:102BD000EE0FFF1FE25CF74F80819181FA01E81B45
:102BE000F90BCF01F7FF03C0909581959F4F069792
:102BF0004CF480915E05883C28F480915E05865FE8
:102C000080935E05FE01EE0FFF1F8F01025C174FE0
:102C1000D8012D913C91C901880F991F820F931FF4
:102C2000840F951F64E070E00E942A49D8018D91BD
:102C30009C9111979B01281B390BEC5AF74F31835C
:102C4000208311967C936E93FE013196F093F704E6
:102C5000E093F604E530F10511F45D9A06C05D9845
:102C6000E630F10511F45C9A05C05C98379711F4D1
:102C70005B9A01C05B98FF91EF91DF91CF91BF917B
:102C8000AF919F918F917F916F915F914F913F9104
:102C90002F911F910F910F900FBE0F901F901895BD
:102CA0002F923F924F925F926F927F928F929F925C
:102CB000AF92BF92CF92DF92EF92FF920F931F934A
:102CC000CF93DF93CDB7DEB722970FB6F894DEBF70
:102CD0000FBECDBF8091FE049091FF042091D404DB
:102CE0003091D504821B930B9093F4088093F308E2
:102CF0008091D2049091D3042091FC043091FD0482
:102D0000821B930B9093B5088093B4088091D004F4
:102D10009091D1042091FA043091FB04821B930B13
:102D20009093BD088093BC082091EE083091EF0885
:102D30006091D8047091D904882777FD8095982FE9
:102D4000B4E0660F771F881F991FBA95D1F7442703
:102D500037FD4095542F620F731F841F951F22E08B
:102D600030E040E050E00E945F493093EF0820934C
:102D7000EE082091FA083091FB086091D60470911A
:102D8000D704882777FD8095982FA4E0660F771FDA
:102D9000881F991FAA95D1F7442737FD4095542FD6
:102DA000620F731F841F951F22E030E040E050E067
:102DB0000E945F493093FB082093FA082091C708CE
:102DC0003091C8086091DA047091DB04882777FDA0
:102DD0008095982F442737FD4095542F620F731F1D
:102DE000841F951F22E030E040E050E00E945F49E0
:102DF0003093C8082093C70820911E0530911F0505
:102E000040912005509121058091D8049091D904DA
:102E1000F4E0880F991FFA95E1F7AA2797FDA0958E
:102E2000BA2F820F931FA41FB51F80931E05909386
:102E30001F05A0932005B093210520912205309114
:102E4000230540912405509125058091D604909149
:102E5000D704E4E0880F991FEA95E1F7AA2797FDC8
:102E6000A095BA2F820F931FA41FB51F8093220530
:102E700090932305A0932405B09325056091260522
:102E8000709127058091280590912905E0902608EA
:102E9000F0902708A0900805B0900905C0900A0599
:102EA000D0900B050E94D0473B014C010027F7FC56
:102EB0000095102FC801B7010E94D047A6019501C7
:102EC0000E94D0469B01AC01C401B3010E94D146CF
:102ED0000E949D47609326057093270580932805DF
:102EE000909329052091F3083091F408442737FD89
:102EF0004095542F8091030990910409A0910509F0
:102F0000B0910609820F931FA41FB51F8093030978
:102F100090930409A0930509B09306092091F30842
:102F20003091F408442737FD4095542F8091CB0809
:102F30009091CC08A091CD08B091CE08820F931F3C
:102F4000A41FB51F8093CB089093CC08A093CD0805
:102F5000B093CE0820913E0530913F054091400549
:102F6000509141058091F3089091F408AA2797FDAC
:102F7000A095BA2F820F931FA41FB51F80933E0503
:102F800090933F05A0934005B093410520914205E1
:102F90003091430540914405509145058091F308D7
:102FA0009091F408AA2797FDA095BA2F820F931F3E
:102FB000A41FB51F8093420590934305A093440539
:102FC000B093450520916E052A83222309F069C03C
:102FD00080916F05882309F064C08091740886FF92
:102FE00060C060912E0570912F0580913005909101
:102FF0003105E090F308F090F408A0907C05BB2424
:10300000CC24DD240027F7FC0095102F20E030E1D0
:1030100040E050E00E945F49C801B7010E94EB48C0
:10302000A60195010E94EB4820E038E040E050E026
:103030000E945F492093C7053093C8054093C90596
:103040005093CA0560913605709137058091380517
:1030500090913905E090F308F090F40820E030E119
:1030600040E050E00E945F49CA01B901A601950104
:103070000E94EB480027F7FC0095102FA80197014C
:103080000E94EB4820E038E040E050E00E945F49B9
:103090002093C3053093C4054093C5055093C605DE
:1030A00010C01092C3051092C4051092C50510926D
:1030B000C6051092C7051092C8051092C905109256
:1030C000CA058091B4089091B5082090C70530904A
:1030D000C8054090C9055090CA05820D931D909374
:1030E000B5088093B4080091B4081091B508A09079
:1030F000C305B090C405C090C505D090C6058091A9
:103100007D05682E772488249924C401B301A60183
:1031100095010E94EB4820E032E040E050E00E9440
:103120005F49020F131F1093B5080093B408209154
:103130003A0530913B0540913C0550913D05809109
:10314000B4089091B508AA2797FDA095BA2F820FD1
:10315000931FA41FB51F80933A0590933B05A0933E
:103160003C05B0933D05409136055091370560917F
:103170003805709139058091B4089091B508209177
:103180006A0530916B05821B930BAA2797FDA095CA
:10319000BA2F840F951FA61FB71F809336059093F3
:1031A0003705A0933805B093390580913605909185
:1031B0003705A0913805B0913905E0908B03F09068
:1031C0008C0300918D0310918E03E816F9060A070F
:1031D0001B0704F580E197E2A0E0B0E08E199F099B
:1031E000A00BB10B8093360590933705A09338055B
:1031F000B09339058091360590913705A091380537
:10320000B091390580933A0590933B05A0933C0516
:10321000B0933D0520913605309137054091380532
:103220005091390588279927DC018E199F09A00B39
:10323000B10B281739074A075B0704F580EF98EDB3
:10324000AFEFBFEFE80EF91E0A1F1B1FE092360515
:10325000F0923705009338051093390580913605B3
:1032600090913705A0913805B091390580933A05C2
:1032700090933B05A0933C05B0933D058091D2040B
:103280009091D3040F9734F488E19CEF9093B508A4
:103290008093B4088091D2049091D304079734F4BA
:1032A00080E398EF9093B5088093B4089091000163
:1032B00099839A30A9F48091D2049091D304835FCA
:1032C000934034F088EE93E09093B5088093B4086F
:1032D0008091D2049091D3048A5F9340DCF014C0B3
:1032E0008091D2049091D304855E974034F088EEAB
:1032F00093E09093B5088093B4088091D2049091A4
:10330000D304835F974034F080ED97E09093B50845
:103310008093B4088091BC089091BD088A199B09DC
:103320009093BD088093BC080091BC081091BD0823
:10333000C401B301A20191010E94EB4820E032E0F8
:1033400040E050E00E945F49021B130B1093BD0840
:103350000093BC082091320530913305409134052B
:10336000509135058091BC089091BD08AA2797FD22
:10337000A095BA2F820F931FA41FB51F809332050B
:1033800090933305A0933405B093350540912E05F5
:1033900050912F0560913005709131058091BC08E6
:1033A0009091BD0820916C0530916D05821B930BA7
:1033B000AA2797FDA095BA2F840F951FA61FB71FA8
:1033C00080932E0590932F05A0933005B09331057F
:1033D00080912E0590912F05A0913005B091310577
:1033E000E0908703F09088030091890310918A038D
:1033F000E816F9060A071B0704F580E197E2A0E04A
:10340000B0E08E199F09A00BB10B80932E0590930D
:103410002F05A0933005B093310580912E05909132
:103420002F05A0913005B09131058093320590931E
:103430003305A0933405B093350520912E053091C6
:103440002F05409130055091310588279927DC01DF
:103450008E199F09A00BB10B281739074A075B0784
:1034600004F580EF98EDAFEFBFEFE80EF91E0A1FED
:103470001B1FE0922E05F0922F050093300510934C
:10348000310580912E0590912F05A0913005B091C6
:1034900031058093320590933305A0933405B093A2
:1034A00035058091D0049091D1040F9734F488E1D0
:1034B0009CEF9093BD088093BC088091D0049091BC
:1034C000D104079734F480E398EF9093BD0880937C
:1034D000BC0899819A30A9F48091D0049091D104CC
:1034E000835F934034F088EE93E09093BD0880931F
:1034F000BC088091D0049091D1048A5F9340DCF0A5
:1035000014C08091D0049091D104855E974034F02E
:1035100088EE93E09093BD088093BC088091D0041E
:103520009091D104835F974034F080ED97E09093C1
:10353000BD088093BC088FEE80937A0080913E0591
:1035400090913F05A0914005B091410580932A05D7
:1035500090932B05A0932C05B0932D0580912E05FB
:1035600090912F05A0913005B091310580930E0503
:1035700090930F05A0931005B09311058091360527
:1035800090913705A0913805B091390580931605C3
:1035900090931705A0931805B093190580913205F3
:1035A00090913305A0913405B091350580931205B3
:1035B00090931305A0931405B093150580913A05D7
:1035C00090913B05A0913C05B0913D0580931A0573
:1035D00090931B05A0931C05B0931D058091740862
:1035E00087FF63C02A81222309F05FC080916F05A5
:1035F000882309F05AC08091BC089091BD08893C8D
:1036000091055CF02091BC083091BD088091BC0808
:103610009091BD082052334011C08091BC08909118
:10362000BD0888539F4FA4F42091BC083091BD0879
:103630008091BC089091BD08205E3C4F880F991F77
:10364000880F991F280F391F3093BD082093BC089D
:103650008091B4089091B508893C91055CF0209167
:10366000B4083091B5088091B4089091B508205203
:10367000334011C08091B4089091B50888539F4F92
:10368000A4F42091B4083091B5088091B4089091C9
:10369000B508205E3C4F880F991F880F991F280F8F
:1036A000391F3093B5082093B40820915605309106
:1036B000570580917008E82FF0E0EE0FFF1FE25CE5
:1036C000F74F8081918182599F4F281739071CF449
:1036D0002F5F3F4F0CC08081918182599F4F82178D
:1036E00093074CF42115310531F0215030403093CF
:1036F0005705209356052091580530915905809122
:103700007108E82FF0E0EE0FFF1FE25CF74F8081B9
:10371000918182599F4F281739071CF42F5F3F4F23
:103720000CC08081918182599F4F821793074CF47E
:103730002115310531F02150304030935905209347
:10374000580520915A0530915B0580917208E82F49
:10375000F0E0EE0FFF1FE25CF74F8081918182590C
:103760009F4F281739071CF42F5F3F4F0CC08081F3
:10377000918182599F4F821793074CF4211531058F
:1037800031F02150304030935B0520935A05209151
:103790005C0530915D0580917308E82FF0E0EE0F35
:1037A000FF1FE25CF74F8081918182599F4F28175C
:1037B00039071CF42F5F3F4F0CC0808191818259E3
:1037C0009F4F821793074CF42115310531F021509A
:1037D000304030935D0520935C05809156059091B3
:1037E000570597FF05C010925705109256050AC05D
:1037F0008F3F910539F034F08FEF90E090935705AB
:1038000080935605809158059091590597FF05C002
:1038100010925905109258050AC08F3F910539F052
:1038200034F08FEF90E09093590580935805809184
:103830005A0590915B0597FF05C010925B051092A9
:103840005A050AC08F3F910539F034F08FEF90E0B0
:1038500090935B0580935A0580915C0590915D057E
:1038600097FF05C010925D0510925C050AC08F3F5E
:10387000910539F034F08FEF90E090935D058093DF
:103880005C0522960FB6F894DEBF0FBECDBFDF9168
:10389000CF911F910F91FF90EF90DF90CF90BF904D
:1038A000AF909F908F907F906F905F904F903F90E0
:1038B0002F90089510927A008091D0049091D104B5
:1038C0009093BD088093BC088091D2049091D3045A
:1038D0009093B5088093B4088091D4049091D50456
:1038E0009093F4088093F3088091D8049091D904C0
:1038F000AA2797FDA095BA2F74E0880F991FAA1FD9
:10390000BB1F7A95D1F79093EF088093EE088091D2
:10391000D6049091D704AA2797FDA095BA2F64E00A
:10392000880F991FAA1FBB1F6A95D1F79093FB08B8
:103930008093FA088091DA049091DB049093C80890
:103940008093C7088FEE80937A00209156053091BE
:10395000570580917008E82FF0E0EE0FFF1FE25C42
:10396000F74F8081918182599F4F281739071CF4A6
:103970002F5F3F4F0CC08081918182599F4F8217EA
:1039800093074CF42115310531F02150304030932C
:10399000570520935605209158053091590580917F
:1039A0007108E82FF0E0EE0FFF1FE25CF74F808117
:1039B000918182599F4F281739071CF42F5F3F4F81
:1039C0000CC08081918182599F4F821793074CF4DC
:1039D0002115310531F021503040309359052093A5
:1039E000580520915A0530915B0580917208E82FA7
:1039F000F0E0EE0FFF1FE25CF74F8081918182596A
:103A00009F4F281739071CF42F5F3F4F0CC0808150
:103A1000918182599F4F821793074CF421153105EC
:103A200031F02150304030935B0520935A052091AE
:103A30005C0530915D0580917308E82FF0E0EE0F92
:103A4000FF1FE25CF74F8081918182599F4F2817B9
:103A500039071CF42F5F3F4F0CC080819181825940
:103A60009F4F821793074CF42115310531F02150F7
:103A7000304030935D0520935C0580915605909110
:103A8000570597FF05C010925705109256050AC0BA
:103A90008F3F910539F034F08FEF90E09093570508
:103AA00080935605809158059091590597FF05C060
:103AB00010925905109258050AC08F3F910539F0B0
:103AC00034F08FEF90E090935905809358058091E2
:103AD0005A0590915B0597FF05C010925B05109207
:103AE0005A050AC08F3F910539F034F08FEF90E00E
:103AF00090935B0580935A0580915C0590915D05DC
:103B000097FF05C010925D0510925C050AC08F3FBB
:103B1000910539F034F08FEF90E090935D0580933C
:103B20005C056091970870E080E090E024EC39E05B
:103B300040E050E00E94EB48609387037093880355
:103B40008093890390938A0360938B0370938C0313
:103B500080938D0390938E030895809177088B3F17
:103B600098F08B3F19F4809156050EC08C3F19F4E4
:103B70008091580509C08D3F19F480915A0504C001
:103B80008E3F21F480915C0580939403809194038F
:103B9000882319F41092940304C08F3F11F480938A
:103BA0009403809176088B3F98F08B3F19F48091B5
:103BB00056050EC08C3F19F48091580509C08D3F01
:103BC00019F480915A0504C08E3F21F480915C0560
:103BD0008093930380919303882319F410929303A5
:103BE00005C0843618F084E68093930380917808AA
:103BF0008B3F98F08B3F19F4809156050EC08C3F97
:103C000019F48091580509C08D3F19F480915A0527
:103C100004C08E3F21F480915C05809395038091D0
:103C20009503882319F41092950305C0843618F083
:103C300084E68093950380917A088B3F98F08B3FC0
:103C400019F4809156050EC08C3F19F480915805E7
:103C500009C08D3F19F480915A0504C08E3F21F4AC
:103C600080915C058093960380919603882319F4D4
:103C70001092960304C08F3F11F4809396038091B5
:103C800081088B3F98F08B3F19F4809156050EC048
:103C90008C3F19F48091580509C08D3F19F480912B
:103CA0005A0504C08E3F21F480915C0580939703F0
:103CB00080919703882319F41092970304C08F3FD3
:103CC00011F480939703809182088B3F98F08B3F8B
:103CD00019F4809156050EC08C3F19F48091580557
:103CE00009C08D3F19F480915A0504C08E3F21F41C
:103CF00080915C0580939803809198038B3010F439
:103D00008AE002C08F3F11F480939803809183086A
:103D10008B3F98F08B3F19F4809156050EC08C3F75
:103D200019F48091580509C08D3F19F480915A0506
:103D300004C08E3F21F480915C05809399038091AB
:103D40009903882319F41092990304C08F3F11F44A
:103D500080939903809188088B3F98F08B3F19F4EA
:103D6000809156050EC08C3F19F48091580509C00A
:103D70008D3F19F480915A0504C08E3F21F4809143
:103D80005C0580939B0380919B03882319F4109218
:103D90009B0304C08F3F11F480939B03809189089B
:103DA0008B3F98F08B3F19F4809156050EC08C3FE5
:103DB00019F48091580509C08D3F19F480915A0576
:103DC00004C08E3F21F480915C058093740580913E
:103DD0007405882319F41092740504C08F3F11F400
:103DE0008093740580918A088B3F98F08B3F19F47B
:103DF000809156050EC08C3F19F48091580509C07A
:103E00008D3F19F480915A0504C08E3F21F48091B2
:103E10005C058093750580917505882319F41092CF
:103E2000750504C08F3F11F48093750580918B0850
:103E30008B3F98F08B3F19F4809156050EC08C3F54
:103E400019F48091580509C08D3F19F480915A05E5
:103E500004C08E3F21F480915C05809376058091AB
:103E60007605882319F41092760504C08F3F11F46B
:103E70008093760580918C088B3F98F08B3F19F4E6
:103E8000809156050EC08C3F19F48091580509C0E9
:103E90008D3F19F480915A0504C08E3F21F4809122
:103EA0005C058093770580917705882319F410923B
:103EB000770504C08F3F11F48093770580919C08AB
:103EC0008B3F98F08B3F19F4809156050EC08C3FC4
:103ED00019F48091580509C08D3F19F480915A0555
:103EE00004C08E3F21F480915C0580937805809119
:103EF0007805882319F41092780504C08F3F11F4D7
:103F00008093780580919D088B3F98F08B3F19F442
:103F1000809156050EC08C3F19F48091580509C058
:103F20008D3F19F480915A0504C08E3F21F4809191
:103F30005C058093790580917905882319F41092A6
:103F4000790504C08F3F11F48093790580919E0814
:103F50008B3F98F08B3F19F4809156050EC08C3F33
:103F600019F48091580509C08D3F19F480915A05C4
:103F700004C08E3F21F480915C0580937A05809186
:103F80007A05882319F410927A0504C08F3F11F442
:103F900080937A0580919F088B3F98F08B3F19F4AE
:103FA000809156050EC08C3F19F48091580509C0C8
:103FB0008D3F19F480915A0504C08E3F21F4809101
:103FC0005C0580937B0580917B05882319F4109212
:103FD0007B0504C08F3F11F480937B0580918D0891
:103FE0008B3F98F08B3F19F4809156050EC08C3FA3
:103FF00019F48091580509C08D3F19F480915A0534
:1040000004C08E3F21F480915C0580939C038091D5
:104010009C03882319F410929C0304C08F3F11F471
:1040200080939C03809192088B3F98F08B3F19F40A
:10403000809156050EC08C3F19F48091580509C037
:104040008D3F19F480915A0504C08E3F21F4809170
:104050005C0580939D0380919D03882319F4109241
:104060009D0304C08F3F11F480939D0380919508B8
:104070008B3F98F08B3F19F4809156050EC08C3F12
:1040800019F48091580509C08D3F19F480915A05A3
:1040900004C08E3F21F480915C0580937C05809163
:1040A0007C05882319F410927C0504C08F3F11F41D
:1040B00080937C05809196088B3F98F08B3F19F494
:1040C000809156050EC08C3F19F48091580509C0A7
:1040D0008D3F19F480915A0504C08E3F21F48091E0
:1040E0005C0580937D0580917D05882319F41092ED
:1040F0007D0504C08F3F11F480937D0580919B085E
:104100008B3F98F08B3F19F4809156050EC08C3F81
:1041100019F48091580509C08D3F19F480915A0512
:1041200004C08E3F21F480915C0580939E038091B2
:104130009E03882319F410929E0304C08F3F11F44C
:1041400080939E0360919B0370E080E090E00E946A
:10415000234527E137EB41ED58E30E9488486093FF
:104160008F037093900380939103909392038091B7
:104170007F088093F20880917E088093BE0808959E
:104180001F93182F0EC080916505882361F484E683
:1041900090E09093C5048093C4048AEF90E00E945D
:1041A000690D115080F71F9108958091650588234E
:1041B00001F51092BB081092B6081092DF08109219
:1041C000EB088091AE04882311F08093B6088091AB
:1041D000AF04882311F08093BB088091B00488233A
:1041E00011F08093EB088091B104882311F0809343
:1041F000DF088091B60890E09093FC078093FB075E
:104200008091BB0890E09093FE078093FD0780911A
:10421000EB0890E0909300088093FF078091DF08FF
:1042200090E090930208809301081092F30410929A
:10423000F4040E94BD140895469A10920505109248
:104240000405109207051092060580E090E0A0E0BA
:10425000B0E08093080590930905A0930A05B093F8
:104260000B051092FB041092FA041092FD041092B8
:10427000FC041092FF041092FE0410927C05109230
:104280007D050E945A1C84E690E00E944C0D0E941D
:104290005A1C8091740880FF10C080910E03909189
:1042A0000F03875B934038F480910E0390910F03C6
:1042B0008E5E924010F40E9420108091D004909164
:1042C000D1049093FB048093FA048091D2049091DE
:1042D000D3049093FD048093FC048091D4049091C6
:1042E000D5049093FF048093FE048091FC04909188
:1042F000FD0490930105809300058091FA0490914C
:10430000FB04909303058093020544E050E0DA013A
:104310000E94B149802D853038F18091FA08909142
:10432000FB0897FF03C0909581959F4F60E170E077
:104330000E942A4970930705609306058091EE0854
:104340009091EF0897FF03C0909581959F4F60E192
:1043500070E00E942A4970930505609304056091FE
:1043600026087091270839C0DA010E94B149802DD2
:104370004F5F5F4FDA010E94B149202D90E0982FE6
:104380008827820F911D90930505809304054F5F48
:104390005F4FDA010E94B149802D4F5F5F4FDA0114
:1043A0000E94B149202D90E0982F8827820F911DFF
:1043B00090930705809306054F5F5F4FDA010E94D7
:1043C000B149602D4F5F5F4FDA010E94B149202D46
:1043D00070E0762F6627620F711D882777FD809524
:1043E000982F0E94D0476093080570930905809329
:1043F0000A0590930B0510922E0510922F0510922E
:10440000300510923105109232051092330510924A
:10441000340510923505109236051092370510922A
:1044200038051092390510923A0510923B0510920A
:104430003C0510923D0510923E0510923F051092EA
:104440004005109241051092BD081092BC081092D0
:10445000B5081092B4081092F4081092F308109264
:10446000CB081092CC081092CD081092CE08809103
:104470000A0390910B03A0910C03B0910D0390934C
:104480002908809328081092E3041092E204109205
:1044900046051092470510924805109249058091F3
:1044A0004A0590914B0590934D0580934C050E94D1
:1044B000953A82E390E09093C5048093C4046091A0
:1044C000970870E080E090E024EC39E040E050E0B4
:1044D0000E94EB486093870370938803809389035D
:1044E00090938A036091980870E080E090E00E94C9
:1044F000EB4860938B0370938C0380938D039093B0
:104500008E031092A00310929F0320914A053091D0
:104510004B0584E195E0AC01249FC001259F900DDF
:10452000349F900D1124AA2797FDA095BA2F809350
:10453000030990930409A0930509B09306098EE13D
:1045400090E09093CE058093CD059093CC05809319
:10455000CB05089581E080936C0852E050936D087C
:1045600043E040936E0874E070936F0865E06093D9
:10457000700886E08093710887E08093720898E065
:104580009093730880EC809374088EE18093750893
:104590008BEF809377083AE03093780822E32093FA
:1045A000760820937A085093790840937B081092FC
:1045B0007C0890937D088FE080937E088AEF80933B
:1045C0007F088AE18093800880E88093810888ECE6
:1045D000809382088FEA8093830894E690938408FE
:1045E0008FE5809385088CE3809386081092870876
:1045F0003093880880E58093890810928A08109289
:104600008B0810928C0810929C0810929D081092B2
:104610009E0810929F0890938D0888E280938E08E0
:104620001092A10820938F0886E9809390086093E8
:104630009108209392088AE5809393082093940828
:104640001092A0089093950830939608909397083D
:10465000909398089093990870939A0820939B08D8
:10466000A6EAB8E0ECE6F3E08CE001900D92815010
:10467000E1F7089581E080936C0892E090936D08D3
:1046800083E080936E0844E040936F0855E05093B8
:10469000700886E08093710887E08093720888E054
:1046A0008093730880E4809374088EE1809375088A
:1046B0008BEF809377083AE03093780822E32093D9
:1046C000760820937A089093790840937B0810929B
:1046D0007C0830937D088FE080937E088AEF80937A
:1046E0007F088AE18093800880E8809381088FEAC0
:1046F000809382088093830894E6909384088FE5E2
:10470000809385088CE3809386081092870880E266
:104710008093880880E58093890810928A08109217
:104720008B0810928C0810929C0810929D08109291
:104730009E0810929F0890938D0888E280938E08BF
:104740001092A10820938F0886E9809390085093D7
:104750009108209392088AE5809393082093940807
:104760001092A0089093950830939608909397081C
:10477000909398089093990840939A088BE48093BB
:104780009B08A6EAB8E0E6E7F3E08CE001900D9222
:104790008150E1F7089581E080936C0882E0809376
:1047A0006D0893E090936E0844E040936F0875E0C5
:1047B0007093700886E08093710887E08093720898
:1047C00088E08093730880E4809374088EE180937E
:1047D00075088BEF809377086AE06093780822E38E
:1047E0002093760820937A084093790890937B0869
:1047F00040937C088EE080937D088FE080937E0854
:104800008AEF80937F088AE18093800880E8809314
:10481000810888E78093820856E95093830894E6DC
:10482000909384088FE5809385088CE380938608B5
:104830001092870880E2809388083AE530938908CF
:1048400088E180938A0882E880938B0810928C0814
:1048500010929C0810929D0810929E0810929F083A
:1048600090938D0888E280938E081092A10820937F
:104870008F0850939008709391082093920830937A
:104880009308209394081092A00890939508609341
:1048900096089093970890939808209399084093CE
:1048A0009A0890939B08A6EAB8E0EEE7F3E08CE064
:1048B00001900D928150E1F708952F923F924F920F
:1048C0005F926F927F928F929F92AF92BF92CF92A0
:1048D000DF92EF92FF920F931F93CF93DF93CDB7A9
:1048E000DEB766970FB6F894DEBF0FBECDBF0E944D
:1048F000501680916E0990916F09009729F00197E9
:1049000090936F0980936E090E94593B892B39F46B
:10491000809100018A3011F4289A01C02898299AC0
:10492000E0916E08F0E0EE0FFF1FE25CF74F0081B0
:1049300011818091F20890E0449708581F4F80172A
:1049400091070CF48C0120910803309109038091A8
:10495000840890E004974091840550918505821762
:104960009307C4F123E0493E520724F110928505D4
:10497000109284058090CB059090CC052091CD05B8
:104980003091CE05C901880F991F820F931F880FA0
:10499000991F880F991F6FE070E00E942A496815DF
:1049A000790574F40894810891089092CC0580925E
:1049B000CB0506C04F5F5F4F50938505409384053C
:1049C0008091CB059091CC05801791070CF03FC0EA
:1049D0008C013DC033E0493E5307C4F08091CD05C2
:1049E0009091CE059C0143E0220F331F4A95E1F7D9
:1049F000280F391FC801820F931F6AE070E00E94E0
:104A00002A497093CE056093CD0519C0CA0101965D
:104A100090938505809384056AE070E00E942A499E
:104A2000892B89F48091CB059091CC058017910753
:104A300034F401969093CC058093CB0504C0109379
:104A4000CC050093CB050091CB051091CC051A83C2
:104A5000098317FF02C01A82198280915E0584368D
:104A600008F05DC080910301882399F480910403CC
:104A7000909105038F5F9F4F61F488E99AE39093CB
:104A8000C5048093C40480E09CE090930503809368
:104A900004038091A5059091A605009731F0019738
:104AA0009093A6058093A50504C010926505109209
:104AB0005005809100018A3011F4289A01C028988D
:104AC0008091A0059091A105815D974028F180918A
:104AD0008508682F70E07A83698381E080935005B0
:104AE000E0916C08F0E0EE0FFF1FE25CF74F1182DF
:104AF0001082E0916D08F0E0EE0FFF1FE25CF74FCF
:104B000011821082E0916F08F0E0EE0FFF1FE25C6F
:104B1000F74F118210826EC2109265056BC28091B0
:104B20005E058D3808F466C21092500580918608A3
:104B300022E3829FC00111249093A6058093A505CE
:104B400089819A8189976CF08091A0059091A10547
:104B5000AFEF8F3F9A0729F001969093A1058093BC
:104B6000A0058091A0059091A105883C910520F0B9
:104B7000E981FA81B89704F51092BF051092C0053B
:104B80001092C1051092C2051092BB051092BC058F
:104B90001092BD051092BE0510923E0510923F0581
:104BA0001092400510924105109242051092430563
:104BB000109244051092450529813A81293C31051E
:104BC0000CF472C180916505882309F013C28091AD
:104BD0006F08E82FF0E0EE0FFF1FE25CF74F8081D7
:104BE00091818C3491050CF4D5C08091A4058F5F20
:104BF0008093A405893C08F4FDC129980E941C21DA
:104C0000109265051092A4051092A1051092A005BE
:104C100080916C08282F30E0F901EE0FFF1FE25C55
:104C2000F74F80819181873491059CF4E0916D0864
:104C3000F0E0EE0FFF1FE25CF74F0190F081E02DF6
:104C4000F7FF03C0F095E195FF4FE734F1050CF451
:104C50006CC080916D08682F70E0DB01AA0FBB1F4C
:104C6000A25CB74F8D919C911197873491053CF0D0
:104C7000F901EE0FFF1FE25CF74F808191818D916A
:104C80009C918734910564F0F901EE0FFF1FE25CFF
:104C9000F74F808191818734910514F042E001C083
:104CA00041E0FB01EE0FFF1FE25CF74F8081918135
:104CB000863491055CF4F901EE0FFF1FE25CF74FBB
:104CC00080819181873491050CF043E0FB01EE0F68
:104CD000FF1FE25CF74F808191818A5B9F4F5CF4FC
:104CE000F901EE0FFF1FE25CF74F8081918187345D
:104CF00091050CF044E0660F771F625C774FDB0193
:104D00008D919C918A5B9F4F5CF4220F331F225C34
:104D1000374FF90180819181863491050CF445E08B
:104D2000A2E0B0E0042E0E94B9490E948B0247E441
:104D30006CE678E00E94B2020E948B020E94C020C2
:104D40008091740880FF10C080910E0390910F0332
:104D5000875B934038F480910E0390910F038E5E31
:104D6000924010F40E9420100E94AC3B80915809A0
:104D7000882309F43FC188EE93E00E94690D88EE14
:104D800093E09093C5048093C40484EF91E00E9463
:104D9000690D30C180819181855B9F4F0CF081C08E
:104DA0008091A4058F5F8093A405893C08F422C1FB
:104DB00029988FEF04E010E0D801082E0E94B9492D
:104DC000109265051092A4051092A1051092A005FD
:104DD0000E941C21809104059091050560E071E01E
:104DE0000E942A49D801062E0E94B94980910405E3
:104DF0009091050560E071E00E942A490F5F1F4F06
:104E0000D801082E0E94B9498091060590910705A6
:104E100060E071E00E942A490F5F1F4FD801062E03
:104E20000E94B949809106059091070560E071E004
:104E30000E942A490F5F1F4FD801082E0E94B949CE
:104E4000609108057091090580910A0590910B0504
:104E50000E949D47DC01CB0160E071E00E942A497D
:104E60000F5F1F4FD801062E0E94B94960910805B7
:104E70007091090580910A0590910B050E949D474C
:104E8000DC01CB0160E071E00E942A490F5F1F4FF7
:104E9000D801082E0E94B9490E948B020E94C020AE
:104EA000A9C01092A405A6C0E981FA81B3970CF0BD
:104EB000A1C0E0916F08F0E0EE0FFF1FE25CF74F3A
:104EC00080819181855B9F4F0CF072C08091A3051A
:104ED0008F5F8093A305893C08F46CC0469A88ECE8
:104EE0008093A30581E090E09093A1058093A005B5
:104EF00081E0809365051092B7051092B805109275
:104F0000B9051092BA0510923E0510923F05109215
:104F100040051092410510924205109243051092EF
:104F200044051092450510922E0510922F051092FF
:104F30003005109231051092360510923705109207
:104F400038051092390580910E0590910F05A091BA
:104F50001005B09111058093320590933305A0930D
:104F60003405B09335058091160590911705A091F1
:104F70001805B091190580933A0590933B05A093CD
:104F80003C05B0933D051092BF051092C0051092EC
:104F9000C1051092C2051092BB051092BC0510927B
:104FA000BD051092BE0580E090E00E94013D02C068
:104FB0001092A305E0916F08F0E0EE0FFF1FE25C96
:104FC000F74F808191818C34910594F08091A205F6
:104FD0008F5F8093A205893C68F046981092650522
:104FE00088EC8093A2051092A1051092A00502C042
:104FF0001092A20580916B03815080936B03809186
:105000006B038F3F29F080915005882309F429C351
:105010000E94AD1D80916C08882E9924D401AA0F9E
:10502000BB1FCD01825C974FFC01808191819A8BDF
:10503000898B80917B08E82EFF24AC5AB74F0D90E6
:10504000BC91A02DBC8BAB8B80917C08282E332487
:1050500080916D08C82EDD24C601880F991FDC01E0
:10506000A25CB74F0D90BC91A02DB88BAF878C5A26
:10507000974FDC01AD90BC90E0916F08AE2FB0E08F
:10508000AA0FBB1FA25CB74F0D90BC91A02DBE878D
:10509000AD876091980370E080E090E00E94234526
:1050A00020E030E040E251E40E94D14620E030E0D0
:1050B00040E85BE30E9488482B013C016093F508BF
:1050C0007093F6088093F7089093F808609199031D
:1050D00070E080E090E00E94234520E030EE4BE25B
:1050E00057E40E9435476093DB087093DC08809397
:1050F000DD089093DE082091B304222331F08AE08A
:1051000090E09093C5048093C404E22F22FF09C06D
:1051100080917405482F50E0440F551F440F551FD0
:1051200010C023FD03C040E050E00BC08091740527
:1051300090E0880F991F880F991F44275527481B17
:10514000590B20917E0530917F05C90113E0880F2E
:10515000991F1A95E1F7821B930B840F951F68E046
:1051600070E00E942A498B0170937F0560937E0551
:10517000E4FF09C080917405482F50E0440F551F8B
:10518000440F551F10C0E5FD03C040E050E00BC0C8
:105190008091740590E0880F991F880F991F44270C
:1051A0005527481B590B80918005909181059C01E2
:1051B000F3E0220F331FFA95E1F7281B390BCA01E0
:1051C000820F931F68E070E00E942A497E8B6D8BEE
:1051D00070938105609380058091B204282F83FF2E
:1051E00003C082E390E004C082FF07C08EEC9FEF13
:1051F000909383058093820504C0109283051092DA
:10520000820521FF09C080919F039091A003019620
:105210009093A00380939F0324FF09C080919F0374
:105220009091A00301979093A00380939F032B89F3
:105230003C89229DF001239DF00D329DF00D11243B
:1052400049895A894E9DC0014F9D900D5E9D900DDC
:105250001124E80FF91FC80168E070E00E942A4994
:10526000E60FF71FFC8BEB8BF0936005E0935F0577
:10527000A29C8001A39C100DB29C100D11246F857F
:1052800078896E9DC0016F9D900D7E9D900D1124BB
:10529000080F191F8D899E8968E070E00E942A49D5
:1052A000060F171F10936205009361058091820518
:1052B00090918305AD85BE858A1B9B0B90936405F9
:1052C000809363058091740882FF0CC080E090E0B9
:1052D000A0E0B0E08093DB089093DC08A093DD08A9
:1052E000B093DE0820E030E040E050E0C301B201BE
:1052F0000E940B48882364F480E090E0A0E0B0E0D6
:105300008093F5089093F608A093F708B093F808F7
:1053100020E030E040E050E06091DB087091DC0874
:105320008091DD089091DE080E940B48882364F488
:1053300080E090E0A0E0B0E08093DB089093DC0890
:10534000A093DD08B093DE088091A008682F70E07C
:10535000E4E06E2E712C6622772282FDC4C083FDAC
:10536000C2C080910E0590910F05A0911005B091DB
:10537000110581569A4EA040B040E4F0C70173E099
:10538000880F991F7A95E1F72B893C89281B390BE7
:105390003093600520935F0580910E0590910F0575
:1053A000A0911005B091110581589843A140B040DB
:1053B000ACF128C080910E0590910F05A0911005C9
:1053C000B0911105805A9541AF4FBF4F3CF5970101
:1053D00053E0220F331F5A95E1F74B895C89240F64
:1053E000351F3093600520935F0580910E059091E5
:1053F0000F05A0911005B091110581589843A14067
:10540000B04064F0C70144E0880F991F4A95E1F766
:10541000281B390B3093600520935F05809116059A
:1054200090911705A0911805B091190581569A4ED3
:10543000A040B0403CF1C701B3E0880F991FBA9576
:10544000E1F7F801E81BF90BF0936205E0936105C1
:105450008091160590911705A0911805B091190536
:1054600081589843A140B0400CF43DC0A4E0EE0C3C
:10547000FF1CAA95E1F7EE19FF09F0936205E0938E
:10548000610531C08091160590911705A09118050E
:10549000B0911905805A9541AF4FBF4F24F5970140
:1054A00073E0220F331F7A95E1F7200F311F3093FD
:1054B0006205209361058091160590911705A091D2
:1054C0001805B091190581589843A140B0405CF08F
:1054D00054E0EE0CFF1C5A95E1F72E193F0930936A
:1054E000620520936105F601EE0FFF1FE25CF74FA6
:1054F0002081318180919308482F50E04217530753
:1055000034F4672821F081E08093700511C0F60122
:10551000EE0FFF1FE25CF74F2081318180919408EC
:10552000DA01A81BB1092A173B0714F41092700581
:10553000F601EE0FFF1FE25CF74F80819181AA27F1
:10554000BB27A41BB50B8A179B0734F463FF04C069
:1055500081E08093710517C080917105882399F0CF
:10556000CC0CDD1CEEE3F8E0CE0EDF1EF601208150
:1055700031818091940890E0841B950B82179307EA
:1055800014F410927105F401EE0FFF1FE25CF74F67
:10559000808191814817590734F460FF04C081E08D
:1055A0008093730515C080917305882389F0F401F9
:1055B000EE0FFF1FE25CF74F20813181809194084C
:1055C000FA01E81BF1092E173F0714F41092730536
:1055D000F401EE0FFF1FE25CF74F808191818A1783
:1055E0009B0734F461FF04C081E08093720517C00B
:1055F00080917205882399F0880C991C2EE338E07D
:10560000820E931ED4012D913C918091940890E0DC
:10561000841B950B8217930714F4109272058091E6
:105620007005882321F480917105882321F081E0A1
:1056300080936F0502C010926F05809173058823D7
:1056400021F480917205882351F081E080936E05EA
:1056500010926F05109270051092710502C01092A1
:105660006E0580916F05882311F40C94723A84E6DC
:1056700090E09093C5048093C4048091920890E0D8
:10568000E981FA818E179F0714F49A8389838091A8
:105690005005882341F11092640510926305109221
:1056A000600510925F0510926205109261058DEC05
:1056B0009CECACECBDE38093F5089093F608A093C6
:1056C000F708B093F8088AE097EDA3EABBE380936C
:1056D000DB089093DC08A093DD08B093DE081092FD
:1056E0006F0510926E052091D1083091D20840913B
:1056F000D3085091D40880910E0590910F05A09188
:105700001005B0911105820F931FA41FB51F809340
:10571000D1089093D208A093D308B093D4082091D5
:10572000D5083091D6084091D7085091D80880917B
:10573000160590911705A0911805B0911905820FD3
:10574000931FA41FB51F8093D5089093D608A093EC
:10575000D708B093D8082091C3083091C40840916D
:10576000C5085091C6088091120590911305A0912B
:105770001405B0911505820F931FA41FB51F8093C8
:10578000C3089093C408A093C508B093C60820919D
:10579000B7083091B8084091B9085091BA08809183
:1057A0001A0590911B05A0911C05B0911D05820F53
:1057B000931FA41FB51F8093B7089093B808A093B8
:1057C000B908B093BA0850906E05552029F480911D
:1057D0006F05882309F45FC010921E0510921F0503
:1057E0001092200510922105109222051092230597
:1057F00010922405109225051092D1081092D2081B
:105800001092D3081092D4081092D5081092D6089E
:105810001092D7081092D8081092C3081092C408AA
:105820001092C5081092C6081092B7081092B808D6
:105830001092B9081092BA0880912E0590912F0508
:10584000A0913005B09131058093320590933305D6
:10585000A0933405B09335058091360590913705B6
:10586000A0913805B091390580933A0590933B0596
:10587000A0933C05B0933D051092E5041092E4041A
:1058800010926D0510926C0510926B0510926A05CE
:10589000552009F0A7C080916F05882309F0A2C0A8
:1058A00060910E0570910F05809110059091110582
:1058B000A0908008BB24CC24DD24E090EE08F0907A
:1058C000EF08A60195010E945F490027F7FC0095AB
:1058D000102F2E193F09400B510BCA01B90120E1CD
:1058E00030E040E050E00E945F4939014A01609198
:1058F0001605709117058091180590911905E09093
:10590000FA08F090FB08A60195010E945F49002764
:10591000F7FC0095102F2E193F09400B510BCA01BF
:10592000B90120E130E040E050E00E945F49F1E23F
:105930006F1671048104910434F0F0E26F2E712C23
:10594000812C912C11C060EE66166FEF76066FEF1A
:1059500086066FEF960644F4E0EE6E2EEFEF7E2E95
:10596000EFEF8E2EEFEF9E2E2132310541055105CE
:105970002CF020E230E040E050E00CC0203E7FEF11
:1059800037077FEF47077FEF570724F420EE3FEFFD
:105990004FEF5FEF80912E0590912F05A09130057C
:1059A000B091310586199709A809B90980932E0588
:1059B00090932F05A0933005B09331058091360563
:1059C00090913705A0913805B0913905821B930B52
:1059D000A40BB50B8093360590933705A09338053B
:1059E000B09339058091E4049091E5048F3F9105CF
:1059F00009F008F4A9C4552009F02AC480916F0564
:105A0000882309F025C46091D1087091D208809153
:105A1000D3089091D40820E031E040E050E00E94AB
:105A20005F492093D1083093D2084093D308509314
:105A3000D4086091D5087091D6088091D7089091CC
:105A4000D80820E031E040E050E00E945F49209318
:105A5000D5083093D6084093D7085093D808E090E3
:105A60008008FF2400E010E020911E0530911F0502
:105A70004091200550912105C801B7010E94EB48D3
:105A800020E031E040E050E00E945F4920931E0595
:105A900030931F0540932005509321052091220546
:105AA000309123054091240550912505C801B70187
:105AB0000E94EB4820E031E040E050E00E945F4966
:105AC0002093220530932305409324055093250508
:105AD00060912605709127058091280590912905F0
:105AE00020E031E040E050E00E945F49209326052D
:105AF0003093270540932805509329056091D108DC
:105B00007091D2088091D3089091D40820911E05FD
:105B100030911F054091200550912105E090990892
:105B2000FF2400E010E0621B730B840B950BA801AF
:105B300097010E945F4920939805309399054093FF
:105B40009A0550939B05CA01B90120E031E040E07D
:105B500050E00E945F49690130936D0520936C0508
:105B60006091D5087091D6088091D7089091D80897
:105B7000209122053091230540912405509125055F
:105B8000621B730B840B950BA80197010E945F4960
:105B9000CA01B90120E031E040E050E00E945F49D5
:105BA000290130936B0520936A056091C3087091B9
:105BB000C4088091C5089091C60820E031E040E01B
:105BC00050E00E945F492093C3083093C40840937B
:105BD000C5085093C6086091B7087091B8088091C5
:105BE000B9089091BA0820E031E040E050E00E940E
:105BF0005F492093B7083093B8084093B908509391
:105C0000BA0860901205709013058090140590906A
:105C1000150580910E0590910F05A0911005B0918A
:105C20001105681A790A8A0A9B0A6092B305709274
:105C3000B4058092B5059092B605E0901A05F090F3
:105C40001B0500911C0510911D0580911605909172
:105C50001705A0911805B0911905E81AF90A0A0B61
:105C60001B0BE092AF05F092B0050093B1051093C5
:105C7000B2056092AB057092AC058092AD05909232
:105C8000AE05E092A705F092A8050093A905109330
:105C9000AA058091320590913305A0913405B09109
:105CA000350586199709A809B9098093320590939B
:105CB0003305A0933405B093350580913A05909152
:105CC0003B05A0913C05B0913D058E199F09A00BA5
:105CD000B10B80933A0590933B05A0933C05B0939C
:105CE0003D058091030990910409A0910509B091A7
:105CF00006098032E4E29E07E7E0AE07E0E0BE0777
:105D000064F080529442A740B0408093030990937E
:105D10000409A0930509B0930609809103099091A5
:105D20000409A0910509B0910609B7FF0CC0805E77
:105D30009B4DA84FBF4F8093030990930409A093F4
:105D40000509B0930609809100018A3011F4289862
:105D500001C0289A81E090E090939305809392058A
:105D60008091D1089091D208A091D308B091D40825
:105D700020918A0530918B0540918C0550918D05BD
:105D8000281B390B4A0B5B0B57FF07C050954095FA
:105D9000309521953F4F4F4F5F4F20523E4440403A
:105DA00050400CF0B9C021E0621620E1720620E0FC
:105DB000820620E092060CF44EC080919105882363
:105DC00009F445C0D401C3017CE0B595A79597952A
:105DD00087957A95D1F701969093930580939205D4
:105DE000D401C30163E0B595A795979587956A950A
:105DF000D1F78093980590939905A0939A05B09355
:105E00009B0589589341A040B04064F088E893E135
:105E1000A0E0B0E08093980590939905A0939A052F
:105E2000B0939B05609198057091990580919A05B2
:105E300090919B0520E031E040E050E00E945F49F6
:105E4000C20ED31ED0926D05C0926C0562C081E077
:105E5000809391055EC01092910540E0641640EF7A
:105E600074064FEF84064FEF94060CF052C08091F9
:105E70009005882309F449C088279927DC018619F1
:105E80009709A809B9095CE0B595A79597958795F5
:105E90005A95D1F701969093930580939205C4018A
:105EA000B30128E030E040E050E00E945F492093D9
:105EB00098053093990540939A0550939B05285770
:105EC0003C4E4F4F5F4F64F488E79CEEAFEFBFEF5F
:105ED0008093980590939905A0939A05B0939B059C
:105EE000609198057091990580919A0590919B0514
:105EF00020E031E040E050E00E945F49C20ED31E36
:105F0000D0926D05C0926C050BC081E08093900526
:105F100007C01092900504C010929305109292054C
:105F2000C090EE08D090EF08D7FE04C0D094C19482
:105F3000D108D394D092C008C092BF08A090FA08AC
:105F4000B090FB08B7FE04C0B094A194B108B3941C
:105F5000B092E608A092E50874E6C716D1040CF0EA
:105F600041C084E6A816B104ECF580919A08282F68
:105F700030E080919205909193052817390724F419
:105F8000309393052093920591E0691694E0790689
:105F900090E0890690E0990674F08091FA0490915F
:105FA000FB042091920530919305820F931F9093EB
:105FB000FB048093FA04A0E06A16ACEF7A06AFEF18
:105FC0008A06AFEF9A0674F48091FA049091FB046C
:105FD0002091920530919305821B930B9093FB04C3
:105FE0008093FA0481E090E090939305809392056A
:105FF00010929405109295051092960510929705AF
:106000008091D5089091D608A091D708B091D80872
:10601000209186053091870540918805509189052A
:10602000281B390B4A0B5B0B57FF07C05095409557
:10603000309521953F4F4F4F5F4F20523E44404097
:1060400050400CF0B9C0E1E0EE16E0E1FE06E0E001
:106050000E07E0E01E070CF44EC080918F058823E8
:1060600009F445C0D801C7014CE0B595A7959795AF
:1060700087954A95D1F70196909393058093920561
:10608000D801C70133E0B595A795979587953A95BF
:10609000D1F78093940590939505A0939605B093BE
:1060A000970589589341A040B04064F088E893E197
:1060B000A0E0B0E08093940590939505A093960599
:1060C000B093970560919405709195058091960520
:1060D0009091970520E031E040E050E00E945F4958
:1060E000420E531E50926B0540926A0562C081E0D9
:1060F00080938F055EC010928F0520E0E21620EF9E
:10610000F2062FEF02072FEF12070CF052C080911A
:106110008E05882309F449C088279927DC018E1948
:106120009F09A00BB10B2CE0B595A7959795879586
:106130002A95D1F701969093930580939205C80113
:10614000B70128E030E040E050E00E945F49209332
:1061500094053093950540939605509397052857DD
:106160003C4E4F4F5F4F64F488E79CEEAFEFBFEFBC
:106170008093940590939505A0939605B093970509
:106180006091940570919505809196059091970581
:1061900020E031E040E050E00E945F49420E531E93
:1061A00050926B0540926A050BC081E080938E058A
:1061B00007C010928E0504C01092930510929205AC
:1061C00078ECC716D1040CF04BC088ECA816B104CB
:1061D0000CF046C080919A08282F30E080919205FB
:1061E000909193052817390724F430939305209351
:1061F000920591E0E91694E0F90690E0090790E035
:10620000190774F08091FC049091FD04209192058F
:1062100030919305820F931F9093FD048093FC04AB
:10622000A0E0EA16ACEFFA06AFEF0A07AFEF1A07E5
:10623000BCF48091FC049091FD0420919205309172
:106240009305821B930B9093FD048093FC0408C07C
:1062500010926B0510926A0510926D0510926C05F4
:1062600020E030E040E050E06091DB087091DC0815
:106270008091DD089091DE080E940B48882341F44C
:1062800010926B0510926A0510926D0510926C05C4
:106290008091D1089091D208A091D308B091D408F0
:1062A00080938A0590938B05A0938C05B0938D0500
:1062B0008091D5089091D608A091D708B091D808C0
:1062C0008093860590938705A0938805B0938905F0
:1062D00010921E0510921F051092200510922105A4
:1062E0001092220510922305109224051092250584
:1062F0001092260510922705109228051092290564
:106300001092D1081092D2081092D3081092D4089B
:106310001092D5081092D6081092D7081092D8087B
:106320001092C3081092C4081092C5081092C608B3
:106330001092B7081092B8081092B9081092BA08D3
:106340001092E5041092E4048091C804882309F4B3
:106350006EC11092C8042091EE083091EF0837FF0B
:1063600003C0309521953F4F3093C0082093BF085C
:106370008091FA089091FB0897FF03C09095819552
:106380009F4F9093E6088093E508243631050CF082
:106390003CC1843691050CF038C120914A053091FA
:1063A0004B058091C9049091CA04281B390B37FF13
:1063B00003C0309521953F4F263031050CF02FC199
:1063C00080916305909164054396879708F091C08A
:1063D00080915405909155058F3F91052CF40196BD
:1063E00090935505809354058091540590915505DF
:1063F00003970CF492C06091CB087091CC08809107
:10640000CD089091CE0824E135E040E050E00E94B4
:106410005F49F9013093C0082093BF0860914A0595
:1064200070914B0580916A0890916B08681B790BFD
:106430007093E6086093E508BFEF6C347B0734F493
:1064400068597E4F7093E6086093E5088091E508EF
:106450009091E608853B910534F0885691409093E1
:10646000E6088093E5088091E5089091E608E81B2E
:10647000F90BF093E608E093E508399734F088E0EB
:1064800090E09093E6088093E5088091E50890916C
:10649000E608885F9F4F34F488EF9FEF9093E608FB
:1064A0008093E508C90137FF03C0909581959F4F00
:1064B00002979CF11092CB081092CC081092CD0854
:1064C0001092CE0880914A0590914B0590936B08ED
:1064D00080936A088091FE049091FF042091E50862
:1064E0003091E608821B930B9093FF048093FE0487
:1064F00014C080914A0590914B0590936B0880934E
:106500006A0810925505109254051092CB0810920B
:10651000CC081092CD081092CE0881E080935205ED
:106520006091030970910409809105099091060911
:1065300024E135E040E050E00E945F4920930309E8
:1065400030930409409305095093060960914A0568
:1065500070914B05621B730B7093C0086093BF086A
:10656000CB010197833B910588F0643B710534F4BE
:10657000CB018C549F4F843B910528F4215030402F
:106580004040504007C06C547F4F64F42F5F3F4F32
:106590004F4F5F4F2093030930930409409305093F
:1065A000509306098091030990910409A09105096F
:1065B000B0910609B7FF0CC088599E4FAF4FBF4F2F
:1065C0008093030990930409A0930509B0930609E9
:1065D0006091030970910409809105099091060961
:1065E00028E631E040E050E00E945F4924E135E0D8
:1065F00040E050E00E94EB48609303097093040967
:1066000080930509909306090AC0109252051092D2
:10661000CB081092CC081092CD081092CE08809131
:106620004A0590914B059093CA048093C9048091C8
:10663000740885FF3EC0E0916C08F0E0EE0FFF1F8C
:10664000E25CF74F0190F081E02DF7FF03C0F09579
:10665000E195FF4F74976CF5E0916D08F0E0EE0F57
:10666000FF1FE25CF74F0190F081E02DF7FF03C0C0
:10667000F095E195FF4F7497E4F480916E09909145
:106680006F09892BB1F08091940390915305893C57
:1066900020F0933021F084E006C0943019F4109279
:1066A000530503C083E0809353058091530590E028
:1066B00008C080915305882331F01092530580E083
:1066C00090E00E94013DA0905909B0905A09A11490
:1066D000B10429F080919D058C3009F44298C09056
:1066E0006305D09064058601D7FE04C000271127FA
:1066F0000C191D09053111053CF08091740884FDC9
:1067000003C081E080939C05E0907D08B601882756
:1067100077FD8095982F2E2D30E040E050E00E94CC
:10672000EB489801442737FD4095542F0E94EB48D1
:1067300020E032E040E050E00E945F4989019A0188
:10674000FF24EC9CC001ED9C900DFC9C900D11244D
:1067500064E070E00E942A49600F711F1B0144240D
:1067600037FC4094542C2092B7053092B8054092E3
:10677000B9055092BA0580913E0590913F05A091D0
:106780004005B091410582199309A409B509809388
:106790003E0590933F05A0934005B093410580913D
:1067A0003E0590913F05A0914005B091410581556E
:1067B000934CA040B04064F080E593ECA0E0B0E0E2
:1067C00080933E0590933F05A0934005B09341050B
:1067D00080913E0590913F05A0914005B091410503
:1067E000805B9C43AF4FBF4F64F480EB9CE3AFEF03
:1067F000BFEF80933E0590933F05A0934005B09373
:10680000410580914A0590914B05892B09F460C0A0
:106810008091740883FF5CC08091CB049091CC047C
:10682000892B09F455C02091E5083091E608809144
:10683000BF089091C0088217930724F43093C008D2
:106840002093BF0820915205222371F080919C056E
:10685000882351F080914A0590914B0590934D0506
:1068600080934C0510929C0580919703482F50E02F
:106870005093C0084093BF08882351F1222341F16F
:1068800000913E0510913F05209140053091410552
:1068900080914E0590914F05BC01469FC001479FD6
:1068A000900D569F900D112460E270E00E942A49DD
:1068B000882777FD8095982F600F711F821F931F87
:1068C00060933E0570933F0580934005909341058A
:1068D00080919D05815080939D058F3F09F02AC1CD
:1068E00088E180939D058091C4049091C504209116
:1068F00004033091050382239323892B29F488B163
:1069000094E0892788B907C080916505882311F034
:10691000429A01C0429860910E0570910F058091D6
:10692000100590911105E0908008FF2400E010E030
:10693000A80197010E945F493093E4072093E30781
:1069400060911605709117058091180590911905B1
:10695000A80197010E945F493093E6072093E5075D
:106960008091EE089091EF089093E8078093E707F5
:106970008091FA089091FB089093EA078093E907C9
:106980008091F3089091F4089093EC078093EB07C3
:1069900080916605909167059093EE078093ED07CF
:1069A0006091460570914705809148059091490591
:1069B00020E032E040E050E00E945F493093F00771
:1069C0002093EF0780914A0590914B059093F4072F
:1069D0008093F30760910309709104098091050980
:1069E0009091060924E135E040E050E00E945F49C3
:1069F0003093F6072093F5078091B5049091B60483
:106A000090930408809303088091080390910903F0
:106A100090930608809305088091BC089091BD086A
:106A200090930808809307088091B4089091B50866
:106A300090930A08809309088091F3089091F408D4
:106A400090930C0880930B0880915F0590916005EE
:106A500090930E0880930D088091610590916205D6
:106A60009093100880930F08D0921208C0921108DA
:106A70008091740590E09093F8078093F7078091D8
:106A8000760590E09093FA078093F9078091CF05FF
:106A90009091D00590931408809313088091D105AC
:106AA0009091D205909316088093150880917709EC
:106AB000909178099093180880931708809179092C
:106AC00090917A0990931A088093190880917B0914
:106AD00090917C0990931C0880931B0880918009F9
:106AE000909181099C0163E0220F331F6A95E1F7C1
:106AF000880F991F820F931F8A0D9B1D20915305AC
:106B000042E3249F90011124820F931F90931E084B
:106B100080931D088091E3089091E40890932008E9
:106B200080931F088091E7089091E80890932208CD
:106B30008093210880916E058823A9F06091BC089C
:106B40007091BD08882777FD8095982F0E94D047C7
:106B50002091F5083091F6084091F7085091F80817
:106B60000E94884832C060910E0570910F05809197
:106B7000100590911105E090BC08F090BD080E94AE
:106B8000D0472091DB083091DC084091DD0850911E
:106B9000DE080E9488485B016C010027F7FC009525
:106BA000102FC801B7010E94D0472091F5083091FD
:106BB000F6084091F7085091F8080E9488489B0118
:106BC000AC01C601B5010E94D1460E949D47709359
:106BD000BD086093BC0880916F058823A9F060917F
:106BE000B4087091B508882777FD8095982F0E948A
:106BF000D0472091F5083091F6084091F708509160
:106C0000F8080E94884832C06091160570911705F7
:106C10008091180590911905E090B408F090B5089E
:106C20000E94D0472091DB083091DC084091DD08BC
:106C30005091DE080E9488485B016C010027F7FC38
:106C40000095102FC801B7010E94D0472091F50888
:106C50003091F6084091F7085091F8080E94884852
:106C60009B01AC01C601B5010E94D1460E949D471F
:106C70007093B5086093B4086091F3087091F408BC
:106C8000E0902A05F0902B0500912C0510912D0520
:106C90008091DB089091DC08A091DD08B091DE08BE
:106CA0008B839C83AD83BE83882777FD8095982F47
:106CB0000E94D0472091F5083091F6084091F708DE
:106CC0005091F8080E9488485B016C01C801B70127
:106CD0000E94D0472B813C814D815E810E94884873
:106CE00020E030E040E05FE30E9488489B01AC0177
:106CF000C601B5010E94D1460E949D477093F408D9
:106D00006093F3088091BC089091BD088150984031
:106D100034F080E098E09093BD088093BC088091A7
:106D2000BC089091BD088050984F34F480E098EFF3
:106D30009093BD088093BC088091B4089091B508E9
:106D40008150984034F080E098E09093B5088093AB
:106D5000B4088091B4089091B5088050984F34F4ED
:106D600080E098EF9093B5088093B4088091F30881
:106D70009091F4088150984034F080E098E090932E
:106D8000F4088093F3088091F3089091F408805000
:106D9000984F34F480E098EF9093F4088093F308D0
:106DA0008091740880FFD8C04091940381FF0EC089
:106DB000423310F580916605909167054497909352
:106DC0006905809368051092510519C020919F03B1
:106DD0003091A003240F311D8091790890E0AC011F
:106DE000249FC001259F900D349F900D112444973E
:106DF000909369058093680581E0809351058091A7
:106E00005005882321F010926905109268052091A1
:106E100066053091670540916805509169054217F4
:106E200053070CF099C080915105882309F494C050
:106E30008091950390E0241B350BBC01629FC0013B
:106E4000639F900D729F900D112460E170E00E948D
:106E50002A496B01A090E204B090E30460914605DA
:106E6000709147058091480590914905E0909603FF
:106E7000FF2400E010E020E032E040E050E00E941B
:106E80005F49C801B7010E94EB4820E230E040E0D2
:106E900050E00E945F497FEF2E3C370714F42EEC40
:106EA0003FEF80919E0590919F058C0144E0000F7B
:106EB000111F4A95E1F7081B190B8091930390E08D
:106EC000DC01AA9DC001AB9D900DBA9D900D1124CF
:106ED00068E070E00E942A49061B170B2333310536
:106EE00014F022E330E0021B130B89819A818C1984
:106EF0009D09800F911F60E170E00E942A49709304
:106F00009F0560939E058091750890E0681779074A
:106F100084F4E981FA81E817F9072CF090939F0532
:106F200080939E0506C029813A8130939F05209366
:106F30009E0580919E0590919F0549815A81481731
:106F4000590724F450939F0540939E0560919E0538
:106F500070919F057A83698389819A819093F20762
:106F60008093F1072091F3083091F4088091F208A2
:106F7000682E7724A981BA8154971CF418861F8241
:106F80002DC0B9016219730929813A813595279578
:106F9000621773070CF49B0189819A8162E070E0AB
:106FA0000E942A49709561957F4FC90126173707BE
:106FB0000CF4CB019301E981FA812E1B3F0B2817BA
:106FC00039070CF4C90129813A81261937099887B4
:106FD0008F838217930714F438872F832091BC087E
:106FE0003091BD0880905F05909060058091CF053D
:106FF0009091D005881A990A281939093093D00838
:107000002093CF0820E030E040E050E06B817C81AD
:107010008D819E810E940B488823F1F1E0900E053E
:10702000F0900F0500911005109111056091BF05BA
:107030007091C0058091C1059091C2050E94D04712
:107040005B016C01C801B7010E94D0472B813C81D4
:107050004D815E810E9488487B018C01B4018827A4
:1070600077FD8095982F0E94D0479B01AC01C80105
:10707000B7010E94D0469B01AC01C601B5010E9438
:10708000D1460E949D476093BF057093C0058093D1
:10709000C1059093C2051CC02091CF083091D00843
:1070A000442737FD4095542F8091BF059091C0052E
:1070B000A091C105B091C205820F931FA41FB51FF7
:1070C0008093BF059093C005A093C105B093C205FE
:1070D0008091BF059091C005A091C105B091C205F6
:1070E000181619061A061B0624F40297A109B109FD
:1070F00003C00296A11DB11D8093BF059093C005EA
:10710000A093C105B093C2058091BF059091C005C1
:10711000A091C105B091C20581589E43A040B040E6
:1071200064F080E89EE3A0E0B0E08093BF05909318
:10713000C005A093C105B093C2058091BF05909191
:10714000C005A091C105B091C2058058914CAF4FC8
:10715000BF4F64F480E891ECAFEFBFEF8093BF05C1
:107160009093C005A093C105B093C2056091CF086C
:107170007091D00880918F0390919003A09191031A
:10718000B091920389879A87AB87BC87882777FD60
:107190008095982F0E94D0477B018C016091BF059C
:1071A0007091C0058091C1059091C2050E94D047A1
:1071B0009B01AC0169857A858B859C850E948848F6
:1071C0009B01AC01C801B7010E94D1460E949D47B6
:1071D0007B018C016B018F81988597FF03C090958F
:1071E00081959F4F62E070E00E942A49A981BA818F
:1071F0006A0F7B1F882777FD8095982F20919E032B
:1072000030E040E050E00E94EB4820E430E040E015
:1072100050E00E945F491901C216D3060CF4970191
:107220004424552442185308241535050CF49201C2
:107230004F815885E981FA814E0F5F1FCA01820F85
:10724000931F97FF03C060E070E005C0BC016816A3
:1072500079060CF4B3018091BE08882E9924CB01E5
:10726000681579050CF4C4018093B608421B530BD2
:107270009A0157FF03C020E030E004C06416750691
:107280000CF49301281539050CF494012093BB08E4
:107290002091B4083091B508409161055091620584
:1072A0008091D1059091D205481B590B5C8B4B8B7B
:1072B000241B350B3093B3082093B20820E030E054
:1072C00040E050E06B817C818D819E810E940B4863
:1072D000882309F440C0E0901605F090170500914E
:1072E0001805109119056091BB057091BC0580913E
:1072F000BD059091BE050E94D0475B016C01C8019D
:10730000B7010E94D0472B813C814D815E810E9454
:1073100088487B018C01AB89BC89BD01882777FD3A
:107320008095982F0E94D0479B01AC01C801B701FE
:107330000E94D0469B01AC01C601B5010E94D14616
:107340000E949D476093BB057093BC058093BD056B
:107350009093BE051CC02091B2083091B308442719
:1073600037FD4095542F8091BB059091BC05A091AD
:10737000BD05B091BE05820F931FA41FB51F80935A
:10738000BB059093BC05A093BD05B093BE0580914D
:10739000BB059091BC05A091BD05B091BE05181626
:1073A00019061A061B0624F40297A109B10903C0A5
:1073B0000296A11DB11D8093BB059093BC05A093BF
:1073C000BD05B093BE058091BB059091BC05A09111
:1073D000BD05B091BE0581589E43A040B04064F009
:1073E00080E89EE3A0E0B0E08093BB059093BC05ED
:1073F000A093BD05B093BE058091BB059091BC05DF
:10740000A091BD05B091BE058058914CAF4FBF4FC4
:1074100064F480E891ECAFEFBFEF8093BB059093ED
:10742000BC05A093BD05B093BE056091B2087091F4
:10743000B308882777FD8095982F0E94D0477B015D
:107440008C016091BB057091BC058091BD05909148
:10745000BE050E94D0479B01AC0169857A858B856A
:107460009C850E9488489B01AC01C801B7010E941D
:10747000D1460E949D479101621573050CF49B0152
:10748000241535050CF4920169817A814F81588564
:10749000641B750B620F731F77FF03C060E070E021
:1074A00004C0661677060CF4B301681579050CF470
:1074B000B4016093EB0869817A81621B730B9B01B5
:1074C0008F819885281B390B37FF03C020E030E0FF
:1074D00004C0621673060CF493012815390554F4A0
:1074E000940108C080916E05882311F00C943D2B07
:1074F0000C94472B2093DF0866960FB6F894DEBFF6
:107500000FBECDBFDF91CF911F910F91FF90EF90F4
:10751000DF90CF90BF90AF909F908F907F906F90B3
:107520005F904F903F902F9008951092D405109245
:10753000D30510925A09109259091092810910929C
:1075400080091092450910922B091092920910920D
:10755000580910926D0910927D091092D005109271
:10756000CF051092D2051092D10510927F0910928A
:107570007E0910926F0910926E0908958091450955
:10758000882319F481E090E008958091920988237E
:1075900009F48CC080912B09882309F487C080915D
:1075A000860990E08370907002970CF474C080910B
:1075B000870980FF70C0109292096091370970911D
:1075C00038098091390990913A092AE030E040E089
:1075D00050E00E945F4920935B0930935C0940931F
:1075E0005D0950935E0960913B0970913C0980915F
:1075F0003D0990913E092AE030E040E050E00E94D1
:107600005F4920935F09309360094093610950936B
:10761000620960913F097091400980914109909100
:1076200042092AE030E040E050E00E945F492093A8
:107630006309309364094093650950936609109279
:10764000450980911B0990911C09A0911D09B091D9
:107650001E098093670990936809A0936909B09304
:107660006A0960911F097091200980912109909108
:10767000220920EA36E841E050E00E945F49309359
:107680006C0920936B0910922B0981E080936D099E
:1076900080E090E0089510926D0910922B091092ED
:1076A00092091092450982E090E0089581E090E00F
:1076B00008950E94BE3A181619060CF44CC0809129
:1076C0006E0990916F0923E0883E920730F4885A42
:1076D0009D4F90936F0980936E098091580988237C
:1076E000B1F180915B0990915C092091460930913C
:1076F0004709821B930B90937809809377098091B7
:107700005F099091600920914A0930914B09821BD1
:10771000930B90937A0980937909809163099091F2
:10772000640920914E0930914F09821B930B90936D
:107730007C0980937B0981E080937D0981E090E062
:1077400090937F0980937E0980E090E008951092E5
:107750007D0982E090E008950E94BE3A892B99F558
:1077600080915B0990915C09A0915D09B0915E09DF
:107770008093460990934709A0934809B09349091B
:1077800080915F0990916009A0916109B0916209AF
:1077900080934A0990934B09A0934C09B0934D09EB
:1077A0008091630990916409A0916509B09166097F
:1077B00080934E0990934F09A0935009B0935109BB
:1077C00081E0809358090895482F2091D305309186
:1077D000D4052530310509F49AC0263031058CF4E2
:1077E0002130310529F1223031051CF4232BD1F051
:1077F00003C12230310571F12330310509F0FCC09D
:107800002FC02730310509F4E2C0273031050CF4D0
:1078100090C02830310509F4E5C02930310509F060
:10782000EBC0A2C0853B09F0E7C081E090E0D5C085
:10783000823639F482E090E09093D4058093D305AA
:1078400004C01092D4051092D3051092E505109251
:10785000E6050895813009F0CFC083E090E0BDC017
:10786000883031F0823151F1833009F044C013C0C7
:1078700025E439E0309300062093FF058091450907
:107880008823C9F5225130403093FE052093FD0531
:107890002E5E3F4F25C022E939E030930006209349
:1078A000FF0580919209882331F5205130403093B3
:1078B000FE052093FD05205F3F4F12C02BE239E00B
:1078C000309300062093FF0580912B09882399F4BB
:1078D000245230403093FE052093FD052C5D3F4F30
:1078E0003093F2052093F10585E090E09093D40564
:1078F0008093D30504C01092D4051092D305842F31
:107900008F5F8093E5058F5F8093E605089590E093
:107910009093F0058093EF059091E505940F909377
:10792000E5058091E605890F8093E60586E090E005
:1079300054C0282F30E0322F22278091EF059091FC
:10794000F005820F931F9093F0058093EF059091BF
:10795000E505940F9093E5058091E605890F8093E6
:10796000E60589E090E039C06091EF057091F0057F
:107970006115710509F440C0E091FD05F091FE0527
:1079800080838091E505840F8093E5059091E6055D
:10799000980F9093E605CB0101979093F0058093A3
:1079A000EF05892B89F08091F1059091F2058E17F2
:1079B0009F0750F03196F093FE05E093FD0530935C
:1079C000D4052093D305089587E090E006C0809108
:1079D000E505481789F488E090E09093D4058093FA
:1079E000D30508958091E605481731F4E091FF052D
:1079F000F091000681E080831092D4051092D305A7
:107A000008952F923F924F925F926F927F928F9242
:107A10009F92AF92BF92CF92DF92EF92FF920F931D
:107A20001F93CF93DF93CDB7DEB76A970FB6F89465
:107A3000DEBF0FBECDBF988F8F8B8330910509F4C9
:107A4000B2C08430910521F0892B09F418C14DC6CC
:107A50008091590990915A090197029708F424C11D
:107A60008091E3059091E40501969093E40580935D
:107A7000E305C39708F43CC61092E4051092E305B1
:107A80001092F8051092F7051092FA051092F90578
:107A90001092FC051092FB051092D8051092D705A4
:107AA0001092D6051092D5051092E7051092E805C0
:107AB0001092E9051092EA051092EB051092EC0580
:107AC0001092ED051092EE051092DB051092DC0588
:107AD0001092DD051092DE051092DF051092E00590
:107AE0001092E1051092E205109202061092010632
:107AF0001092DA051092D90510928109109280092E
:107B000080917D09882309F44BC080917709909179
:107B10007809909371098093700960917909709147
:107B20007A09709373096093720921E020937609B2
:107B300090932D0980932C0970932F0960932E093F
:107B400020933209709561957F4F909581959F4F55
:107B50000E9496439C019093F4058093F305E09175
:107B60007009F0917109F7FF03C08AE590E002C047
:107B70008EE091E0821B930B9093F4058093F305C4
:107B80004091F3055091F405609172097091730969
:107B9000CF010E94D0447093F6056093F5059AC515
:107BA000109276099EC58091590990915A090197C2
:107BB00009F47AC08091E3059091E40501969093D1
:107BC000E4058093E3058955924008F491C510922D
:107BD000E4051092E30580917D09882309F44CC0E7
:107BE0001092FA051092F9051092FC051092FB050F
:107BF0001092D8051092D7051092D6051092D5058F
:107C00001092E7051092E8051092E9051092EA0536
:107C10001092EB051092EC051092ED051092EE0516
:107C20001092DB051092DC051092DD051092DE0546
:107C30001092DF051092E0051092E1051092E20526
:107C40001092040610920306109206061092050682
:107C5000809177099091780990932D0980932C0950
:107C60008091790990917A0990932F0980932E0938
:107C700081E08093320973C11092320932C51092AB
:107C8000E4051092E3051092D0051092CF051092F2
:107C9000D2051092D105109281091092800910929C
:107CA0005A091092590927C58091590990915A098A
:107CB0008130910509F456C18230910541F0892B3C
:107CC00009F00FC51092E4051092E30514C58091E8
:107CD0007609882309F405C580917E0990917F0972
:107CE000181619060CF03BC180918009909181090A
:107CF000099709F434C18091F7059091F805019630
:107D00009093F8058093F70540912C0950912D0927
:107D10008091770990917809DA01A81BB90BB7FF18
:107D200003C0B095A195BF4F60912E0970912F09A6
:107D30008091790990917A09FB01E81BF90BF7FF13
:107D400003C0F095E195FF4F2091010630910206A6
:107D50008091F5059091F605821B930B8536910570
:107D600074F1A83CB105E4F4E83CF105CCF4809151
:107D7000D9059091DA058C3091052CF404969093F6
:107D8000DA058093D9058091D9059091DA05820FA3
:107D9000931F909302068093010683E090E029C030
:107DA0008091D9059091DA05823091052CF00197E8
:107DB0009093DA058093D90584E090E01AC0C397C8
:107DC0000CF478C0A436B10564F4E436F1054CF443
:107DD000285F3F4F309302062093010685E090E034
:107DE00008C02F5F3F4F309302062093010686E0C4
:107DF00090E090938109809380091092FC05109285
:107E0000FB0581E090E09093FA058093F905A0903E
:107E10000106B0900206CC24B7FCC094DC2C809103
:107E2000F3059091F4050E9472447C0120900106B4
:107E300030900206442437FC4094542C8091F30582
:107E40009091F4050E94C8443C010027F7FC00957E
:107E5000102FC801B701A60195010E94EB4828EE3A
:107E600033E040E050E00E945F49809170099091BA
:107E70007109820F931F90932D0980932C098824F8
:107E800077FC8094982CC401B301A20191010E9457
:107E9000EB4828EE33E040E050E00E945F498091DB
:107EA000720990917309820F931F90932F09809309
:107EB0002E0955C0A436B1050CF04BC0E436F105CF
:107EC0000CF047C087E090E090938109809380098F
:107ED0001092FA051092F9051092FC051092FB051C
:107EE000433051051CF04350504006C03FEF4E3F19
:107EF000530734F44D5F5F4F50932D0940932C0985
:107F0000633071051CF06350704006C04FEF6E3F48
:107F1000740734F46D5F7F4F70932F0960932E09BF
:107F200080912C0990912D0903960797C0F48091B8
:107F30002E0990912F090396079788F410922D0926
:107F400010922C0910922F0910922E0989E090E0CE
:107F500002C088E090E0909381098093800981E0DD
:107F600090E0BAC380917E0990917F091816190696
:107F70000CF0ACC380910506909106060196909393
:107F800006068093050680917709909178099E8B6B
:107F90008D8B80912C0990912D09AD89BE89A81BEC
:107FA000B90BBE8BAD8BE0917909F0917A09809184
:107FB0002E0990912F09E81BF90BFC8BEB8B60913C
:107FC000D7057091D8056A0F7B1F7093D805609311
:107FD000D7050091D5051091D6050E0F1F1F1093E0
:107FE000D6050093D505A0900F09B0901009C09058
:107FF0001109D090120960900B0970900C098090C3
:108000000D0990900E0910927F0910927E09CB0104
:1080100077FF04C088279927861B970B895B9B40B5
:1080200054F4C80117FF04C088279927801B910BBF
:10803000895B9B4064F0809103069091040688322E
:10804000910528F40196909304068093030680918D
:10805000030690910406009729F101979093040676
:1080600080930306CB01A3E0880F991FAA95E1F73F
:10807000861B970B68E070E00E942A497093D80530
:108080006093D705C801F3E0880F991FFA95E1F7CF
:10809000801B910B68E070E00E942A497093D6051E
:1080A0006093D5058091FB059091FC051816190683
:1080B00044F41092D8051092D7051092D60510926C
:1080C000D5054091D7055091D8055A8349838091B1
:1080D0007505282F30E040E050E02F87388B498B22
:1080E0005A8B4091D5055091D6055C834B83809186
:1080F000F9059091FA059A8F898FE0907605181608
:1081000019060CF058C0E694E694FF240027F7FC0B
:108110000095102FC801B701A60195010E94EB48F8
:1081200024E630E040E050E00E945F4959016A01D6
:10813000C801B701A40193010E94EB4824E630E096
:1081400040E050E00E945F49D601C5018835EFEF5D
:108150009E07EFEFAE07EFEFBE0724F488E59FEF31
:10816000AFEFBFEF3C014D01893A9105A105B10583
:108170002CF0E8EA6E2E712C812C912C28356FEFB3
:1081800036076FEF46076FEF560724F428E53FEFF9
:108190004FEF5FEF19012A01293A310541055105D9
:1081A0002CF078EA272E312C412C512C809174052B
:1081B000682F70E05AC0E694E694FF240027F7FC8D
:1081C0000095102FC801B701A60195010E94EB4848
:1081D00022E330E040E050E00E945F4959016A012B
:1081E000C801B701A40193010E94EB4822E330E0EB
:1081F00040E050E00E945F49D601C5018835EFEFAD
:108200009E07EFEFAE07EFEFBE0724F488E59FEF80
:10821000AFEFBFEF3C014D01893A9105A105B105D2
:108220002CF068EA662E712C812C912C28356FEF8A
:1082300036076FEF46076FEF560724F428E53FEF48
:108240004FEF5FEF19012A01293A31054105510528
:108250002CF098EA292E312C412C512C8091740558
:1082600090E062E070E00E942A497092CA08609231
:10827000C9083092E1082092E0087B010027F7FC52
:108280000095102FAD89BE899D01442737FD40958B
:10829000542FC801B7010E94EB4824E130E040E0D0
:1082A00050E00E945F4959016A012093DB05309339
:1082B000DC054093DD055093DE05EB89FC899F01C9
:1082C000442737FD4095542FC801B7010E94EB4861
:1082D00024E130E040E050E00E945F492093DF0558
:1082E0003093E0054093E1055093E205898D9A8D26
:1082F0001816190664F599E7A916B104C104D1044A
:108300002CF088E790E0A0E0B0E00DC0A8E8AA1645
:10831000AFEFBA06AFEFCA06AFEFDA0664F488E84B
:108320009FEFAFEFBFEF8093DB059093DC05A09349
:10833000DD05B093DE05293731054105510564F5AA
:1083400028583F4F4F4F5F4F0CF03CC02FC0E9E71C
:10835000AE16B104C104D1042CF088E790E0A0E08F
:10836000B0E00DC0F8E8AF16FFEFBF06FFEFCF0695
:10837000FFEFDF0664F488E89FEFAFEFBFEF809375
:10838000DB059093DC05A093DD05B093DE0529376E
:108390003105410551052CF088E790E0A0E0B0E000
:1083A00009C028583F4F4F4F5F4F64F488E89FEF54
:1083B000AFEFBFEF8093DF059093E005A093E10559
:1083C000B093E205A090DB05B090DC05C090DD0520
:1083D000D090DE05B092C208A092C108E090DF05FF
:1083E000F090E0050091E1051091E205F09202099C
:1083F000E092010989819A819C01442737FD4095CB
:10840000542F6F85788989899A890E94EB4820E8E2
:1084100030E040E050E00E945F49283B9FEF390781
:108420009FEF49079FEF590724F428EB3FEF4FEFE9
:108430005FEF293431054105510524F028E430E08F
:1084400040E050E02A0D3B1D4C1D5D1D260D371DE3
:10845000481D591DAA24BB246501A21AB30AC40AE7
:10846000D50AA092E705B092E805C092E905D0923E
:10847000EA05AB81BC81BD01882777FD8095982FE7
:108480002F85388949895A890E94EB4820E830E0D5
:1084900040E050E00E945F49283BBFEF3B07BFEF41
:1084A0004B07BFEF5B0724F428EB3FEF4FEF5FEF85
:1084B000293431054105510524F028E430E040E03D
:1084C00050E02E0D3F1D401F511F220D331D441D36
:1084D000551D662477244301621A730A840A950A9B
:1084E0006092EB057092EC058092ED059092EE059E
:1084F000B092E408A092E3087092E8086092E7085E
:108500006091030970910409809105099091060911
:1085100024E135E040E050E00E945F4979018A01A2
:10852000C9010E94C8449A8789872091E705309144
:10853000E8054091E9055091EA052B873C874D8776
:108540005E87C7010E94724498878F83A090E705D9
:10855000B090E805C090E905D090EA05C7010E94F7
:10856000C8449A8F898F2090EB053090EC0540909D
:10857000ED055090EE05C7010E9472449E838D83E5
:108580002D893E8937FF03C0309521953F4F2D52ED
:10859000314054F42B893C8937FF03C03095219535
:1085A0003F4F2D5231404CF01092D2051092D10520
:1085B0001092D0051092CF0594C080914C089091F4
:1085C0004D0880914C0890914D08A98DBA8DBD0140
:1085D000882777FD8095982FA60195010E94EB488A
:1085E0007B018C01ED81FE81BF01882777FD80959D
:1085F000982FA20191010E94EB48E61AF70A080B96
:10860000190BC801B70120E43FE140E050E00E94AF
:108610005F49223EFFEF3F07FFEF4F07FFEF5F0786
:1086200024F422EE3FEF4FEF5FEF2F31310541058C
:10863000510524F02EE130E040E050E03093D205C7
:108640002093D1052F813885B901882777FD809542
:10865000982F2B853C854D855E850E94EB487B01DC
:108660008C0149855A85BA01882777FD8095982F16
:10867000A40193010E94EB48E60EF71E081F191F84
:10868000C801B70120EC30EE4FEF5FEF0E945F4969
:10869000223E6FEF36076FEF46076FEF560724F461
:1086A00022EE3FEF4FEF5FEF2F31310541055105CE
:1086B00024F02EE130E040E050E03093D0052093EC
:1086C000CF058F89988D0497B1F404C0AF89B88D18
:1086D000149789F482E090E090935A0980935909A5
:1086E0000AC010925A091092590982E090E005C020
:1086F00081E090E002C080E090E06A960FB6F894C6
:10870000DEBF0FBECDBFDF91CF911F910F91FF90C4
:10871000EF90DF90CF90BF90AF909F908F907F9021
:108720006F905F904F903F902F900895EF92FF923F
:108730000F931F93CF93DF938C01EB019C0197FF65
:1087400004C022273327281B390BCE01D7FF04C0D2
:10875000882799278C1B9D0B821793073CF4CE0129
:10876000E8018C01B1E0EB2EF12C02C0EE24FF24D5
:10877000209741F40115110529F461E070E080E0D3
:1087800090E024C0B801882777FD8095982F28EEC7
:1087900033E040E050E00E94EB489E01442737FD63
:1087A0004095542F0E945F49B90137FF03C070956F
:1087B00061957F4F882777FD8095982F6D3021E058
:1087C000720720E0820720E0920704F524E630E0FB
:1087D00040E050E00E94EB482CE031E040E050E007
:1087E0000E945F49CA01B901A4E0660F771F881F84
:1087F000991FAA95D1F7621B730B840B950B24E686
:1088000030E040E050E00E945F4953C0633422E012
:10881000720720E0820720E0920734F524E630E07A
:1088200040E050E00E94EB48605B7846804090401A
:1088300026E331E040E050E00E945F49CA01B901FF
:10884000F4E0660F771F881F991FFA95D1F7621B16
:10885000730B840B950B24E630E040E050E00E945F
:108860005F49215F3F4F25C022E330E040E050E008
:108870000E94EB48645E70478040904026EA31E0F9
:1088800040E050E00E945F49CA01B901E4E0660F90
:10889000771F881F991FEA95D1F7621B730B840B12
:1088A000950B22E330E040E050E00E945F49225EF9
:1088B0003F4FEF2829F48AE590E0821B930B9C013F
:1088C00017FD03C0D7FF06C002C0D7FD03C0309517
:1088D00021953F4FC901DF91CF911F910F91FF90DB
:1088E000EF900895FC01F7FF04C0882799278E1B9D
:1088F0009F0B8856914034F0CF0168E671E00E94EA
:108900002A49FC01F7FD03C041E050E005C0F095A5
:10891000E195FF4F4FEF5FEFCF018B5590408A35C8
:10892000910530F484EB90E08E1B9F0BFC010FC08F
:10893000CF01855B90408A35910518F4E45BF040E7
:108940000EC0CF018F5091408A35910518F081E01B
:1089500090E007C088E691E08E1B9F0BFC018FEF33
:108960009FEFEE0FFF1FEF5DFB4F25913491BC0190
:10897000649FC001659F900D749F900D1124AC0100
:10898000429FC001439F900D529F900D1124089566
:108990002AE530E0281B390BC9010E947244089572
:1089A000EF92FF920F931F93CF93DF93EA01AC01F5
:1089B00097FF04C044275527481B590B9B0177FF9D
:1089C00004C022273327261B370B2417350794F4BE
:1089D0009C01B901882777FD8095982F28EE33E018
:1089E00040E050E00E94EB487B018C01CE010E94E8
:1089F00072440FC0882777FD8095982F28EE33E0CA
:108A000040E050E00E94EB487B018C01CE010E94C7
:108A1000C8449C01442737FD4095542FC801B70135
:108A20000E945F49B90137FF03C0709561957F4F80
:108A3000882777FD8095982FDF91CF911F910F9117
:108A4000FF90EF900895A8E0B0E0E9E2F5E40C941F
:108A500084497B018C01611571058105910519F42B
:108A600082E089835AC083E089838EE1C82ED12CAD
:108A7000DC82CB82ED82FE820F831887C801B701AA
:108A80000E949645BC016150704077FF33C0EE27CD
:108A9000FF27E61BF70B20E030E040E050E081E0EC
:108AA00090E0A0E0B0E00E2E04C0880F991FAA1F2E
:108AB000BB1F0A94D2F70197A109B1098E219F210A
:108AC000A023B1230097A105B10521F021E030E0FA
:108AD00040E050E004C016950795F794E794EA95B6
:108AE000D2F72E293F29402B512B2D833E834F83D4
:108AF00058870FC06115710581F0062E04C0EE0C79
:108B0000FF1C001F111F0A94D2F7ED82FE820F8313
:108B10001887C61AD70ADC82CB821A82CE01019648
:108B20000E94E345E8E028960C94A049EF92FF925A
:108B30000F931F939B01AC01203080E0380781E048
:108B4000480780E0580780F42F3F31054105510563
:108B500009F020F4EE24FF24870119C068E0E62E16
:108B6000F12C012D112D13C0203080E0380780E05A
:108B7000480781E0580730F490E1E92EF12C012DEF
:108B8000112D05C088E1E82EF12C012D112D80E278
:108B900090E0A0E0B0E08E199F09A00BB10B04C0DB
:108BA0005695479537952795EA94D2F7F901EF55F1
:108BB000FC4F2081821B9109A109B1091F910F91DE
:108BC000FF90EF9008959F92AF92BF92CF92DF9265
:108BD000EF92FF920F931F93EE24FF248701FC0175
:108BE000248135814681578191808081823010F4C3
:108BF0004061A2C0843009F49BC0823029F420E097
:108C000030E040E050E005C0211531054105510537
:108C100019F4E0E0F0E092C0828193816FEF823836
:108C200096070CF05AC062E87FEF681B790B6A3137
:108C300071052CF020E030E040E050E02AC0AA248A
:108C4000BB24650181E090E0A0E0B0E0062E04C006
:108C5000880F991FAA1FBB1F0A94D2F70197A10979
:108C6000B10982239323A423B5230097A105B1055D
:108C700029F071E0A72EB12CC12CD12C04C056953F
:108C80004795379527956A95D2F72A293B294C298C
:108C90005D29DA01C9018F779070A070B0708034BF
:108CA0009105A105B10539F427FF09C0205C3F4FAC
:108CB0004F4F5F4F04C0215C3F4F4F4F5F4F80E0ED
:108CC00090E0203060E0360760E0460760E4560739
:108CD00010F081E090E0FC0123C08038910544F55C
:108CE000FC01E158FF4FDA01C9018F779070A07045
:108CF000B07080349105A105B10539F427FF09C092
:108D0000205C3F4F4F4F5F4F04C0215C3F4F4F4FA0
:108D10005F4F57FF05C05695479537952795319674
:108D200087E056954795379527958A95D1F706C0E0
:108D300020E030E040E050E0EFEFF0E0E22EF32EF4
:108D4000942F9F77802F8078892B9E2F9795992736
:108D500097958F77082F092B9E2F9695812F8078D6
:108D6000892B9794992497948F77182F1929C801E4
:108D7000B7011F910F91FF90EF90DF90CF90BF90C0
:108D8000AF909F900895FC014150504030F0019009
:108D90000616D1F73197CF010895882799270895AE
:108DA0005058BB27AA270ED079C16AD130F06FD1B5
:108DB00020F031F49F3F11F41EF45FC10EF4E095F2
:108DC000E7FB55C1E92F7BD180F3BA176207730720
:108DD0008407950718F071F49EF593C10EF4E095A1
:108DE0000B2EBA2FA02D0B01B90190010C01CA0165
:108DF000A0011124FF27591B99F0593F50F4503E10
:108E000068F11A16F040A22F232F342F4427585F01
:108E1000F3CF469537952795A795F0405395C9F719
:108E20007EF41F16BA0B620B730B840BBAF09150D1
:108E3000A1F0FF0FBB1F661F771F881FC2F70EC070
:108E4000BA0F621F731F841F48F487957795679543
:108E5000B795F7959E3F08F0B3CF9395880F08F02C
:108E60009927EE0F9795879508950CD017C10FD1CC
:108E700040F006D130F021F45F3F19F0F8C05111F5
:108E800041C1FBC01CD198F39923C9F35523B1F319
:108E9000951B550BBB27AA2762177307840738F069
:108EA0009F5F5F4F220F331F441FAA1FA9F333D0C8
:108EB0000E2E3AF0E0E830D091505040E695001C7C
:108EC000CAF729D0FE2F27D0660F771F881FBB1F38
:108ED000261737074807AB07B0E809F0BB0B802D12
:108EE000BF01FF2793585F4F2AF09E3F510568F05E
:108EF000BEC008C15F3FECF3983EDCF386957795E2
:108F00006795B795F7959F5FC9F7880F911D96955F
:108F1000879597F90895E1E0660F771F881FBB1FBB
:108F2000621773078407BA0720F0621B730B840B68
:108F3000BA0BEE1F88F7E095089504D06894B1113C
:108F4000E1C00895C4D088F09F5790F0B92F9927B9
:108F5000B751A0F0D1F0660F771F881F991F1AF044
:108F6000BA95C9F712C0B13081F0CBD0B1E0089505
:108F7000C8C0672F782F8827B85F39F0B93FCCF386
:108F8000869577956795B395D9F73EF4909580953A
:108F9000709561957F4F8F4F9F4F0895E89409C05A
:108FA00097FB3EF490958095709561957F4F8F4F1C
:108FB0009F4F9923A9F0F92F96E9BB279395F69532
:108FC000879577956795B795F111F8CFFAF4BB0FB0
:108FD00011F460FF1BC06F5F7F4F8F4F9F4F16C014
:108FE000882311F096E911C0772321F09EE8872F9E
:108FF000762F05C0662371F096E8862F70E060E05A
:109000002AF09A95660F771F881FDAF7880F9695D2
:10901000879597F9089507D008F481E0089503D063
:1090200008F48FEF0895990F0008550FAA0BE0E898
:10903000FEEF16161706E807F907C0F0121613061A
:10904000E407F50798F0621B730B840B950B39F45A
:109050000A2661F0232B242B252B21F408950A26C0
:1090600009F4A140A6958FEF811D811D089597F900
:109070009F6780E870E060E008959FEF80EC0895BE
:1090800000240A94161617061806090608950024E7
:109090000A9412161306140605060895092E039461
:1090A000000C11F4882352F0BB0F40F4BF2B11F4D5
:1090B00060FF04C06F5F7F4F8F4F9F4F089557FD34
:1090C0009058440F551F59F05F3F71F04795880F36
:1090D00097FB991F61F09F3F79F0879508951216CD
:1090E00013061406551FF2CF4695F1DF08C0161679
:1090F00017061806991FF1CF86957105610508942A
:109100000895E894BB2766277727CB0197F9089540
:109110000BD0C4CFB5DF28F0BADF18F0952309F0E3
:10912000A6CFABCF1124EECFCADFA0F3959FD1F32A
:10913000950F50E0551F629FF001729FBB27F00D05
:10914000B11D639FAA27F00DB11DAA1F649F66275A
:10915000B00DA11D661F829F2227B00DA11D621FA9
:10916000739FB00DA11D621F839FA00D611D221F63
:10917000749F3327A00D611D231F849F600D211D47
:10918000822F762F6A2F11249F5750408AF0E1F0EA
:1091900088234AF0EE0FFF1FBB1F661F771F881F33
:1091A00091505040A9F79E3F510570F060CFAACF73
:1091B0005F3FECF3983EDCF3869577956795B7951E
:1091C000F795E7959F5FC1F7FE2B880F911D969548
:1091D000879597F90895629FD001739FF001829F50
:1091E000E00DF11D649FE00DF11D929FF00D839F36
:1091F000F00D749FF00D659FF00D9927729FB00DD3
:10920000E11DF91F639FB00DE11DF91FBD01CF01E5
:1092100011240895991B79E004C0991F961708F04E
:10922000961B881F7A95C9F780950895AA1BBB1BCA
:1092300051E107C0AA1FBB1FA617B70710F0A61B56
:10924000B70B881F991F5A95A9F780959095BC0177
:10925000CD01089597FB092E07260AD077FD04D08B
:10926000E5DF06D000201AF4709561957F4F0895D0
:10927000F6F7909581959F4F0895A1E21A2EAA1BAB
:10928000BB1BFD010DC0AA1FBB1FEE1FFF1FA217B6
:10929000B307E407F50720F0A21BB30BE40BF50BB3
:1092A000661F771F881F991F1A9469F7609570953C
:1092B000809590959B01AC01BD01CF01089597FB6E
:1092C000092E05260ED057FD04D0D7DF0AD0001C8A
:1092D00038F450954095309521953F4F4F4F5F4F53
:1092E0000895F6F790958095709561957F4F8F4F13
:1092F0009F4F08952F923F924F925F926F927F926D
:109300008F929F92AF92BF92CF92DF92EF92FF9295
:109310000F931F93CF93DF93CDB7DEB7CA1BDB0B41
:109320000FB6F894DEBF0FBECDBF09942A883988E6
:1093300048885F846E847D848C849B84AA84B984ED
:10934000C884DF80EE80FD800C811B81AA81B981F9
:10935000CE0FD11D0FB6F894DEBF0FBECDBFED010D
:109360000895F999FECFB2BDA1BDF89A119600B447
:109370000895F999FECFB2BDA1BD00BC11960FB6FC
:0C938000F894FA9AF99A0FBE0895FFCFF6
:10938C000A01FF64496E74656772616C4E69636BA8
:10939C0020202020496E74656772616C526F6C6C72
:1093AC00202020204163634E69636B202020202005
:1093BC0020202020416363526F6C6C2020202020E1
:1093CC00202020204779726F476965722020202069
:1093DC0020202020486F6568656E576572742020C8
:1093EC00202020204163635A202020202020202090
:1093FC0020202020476173202020202020202020A6
:10940C00202020204B6F6D7061737356616C7565F5
:10941C002020202045727361747A6B6F6D706173BC
:10942C00732020205573725F5061723120202020F0
:10943C00202020205573725F706172332020202011
:10944C00202020204D6F746F725F566F726E6520F6
:10945C00202020204D6F746F725F48696E74656EAA
:10946C00202020204D6F746F725F4C696E6B7320DF
:10947C00202020204D6F746F725F52656368747387
:10948C0020202020496E6465782020202020202078
:10949C0020202020554261742020202020202020D4
:1094AC00202020204D657373776572745F4E69635D
:1094BC006B2020204D657373776572745F526F6CEF
:1094CC006C2020204D657373776572745F476965F6
:1094DC0072202020537469636B5F4E69636B20208C
:1094EC0020202020537469636B5F526F6C6C2020BA
:1094FC0020202020537469636B5F476965722020BC
:10950C00202020204750535F4E69636B2020202081
:10951C00202020204750535F526F6C6C202020205D
:10952C002020202075746D5F6561737420202020CD
:10953C002020202075746D5F6E6F7274682020205F
:10954C002020202075746D5F616C742020202020F9
:10955C00202020206770735F737461746520202055
:10956C002020202067705F7265675F7820202020A4
:10957C002020202067705F7265675F792020202093
:10958C0020202020FFFF0A016400007D0000FF0363
:10959C000102030405060708090A48616C6C6F2078
:1095AC0057656C7400000000000000000000000013
:1095BC00000000000000000000000000000000009F
:1095CC00000000000000000000000000000000008F
:1095DC00000000000000000000000000000000007F
:1095EC00000000000000000000000A0142656769ED
:1095FC006E6E657200004E6F726D616C0000537080
:10960C006F72740000640090D0030090D0030017B8
:10961C00B7D13830FB103A409696020A644664EC97
:10962C00FF00010202030303030404040404040402
:10963C0004050505050505050505050505050505CF
:10964C0005060606060606060606060606060606AF
:10965C00060606060606060606060606060606069E
:10966C00060707070707070707070707070707077F
:10967C00070707070707070707070707070707076E
:10968C00070707070707070707070707070707075E
:10969C00070707070707070707070707070707074E
:1096AC00070808080808080808080808080808082F
:1096BC00080808080808080808080808080808081E
:1096CC00080808080808080808080808080808080E
:1096DC0008080808080808080808080808080808FE
:1096EC0008080808080808080808080808080808EE
:1096FC0008080808080808080808080808080808DE
:10970C0008080808080808080808080808080808CD
:10971C0008080808080808080808080808080808BD
:02972C00080033
:00000001FF
/branches/salvo_gps/Basis_v0067g/trunk/_Settings.h
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,145
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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 AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0;
volatile int AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 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_Mess(100);
if(MessLuftdruck < 850) off = 0;
for(; off < 250;off++)
{
OCR0A = off;
Delay_ms_Mess(50);
printf(".");
if(MessLuftdruck < 900) break;
}
eeprom_write_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET], off);
DruckOffsetSetting = off;
Delay_ms_Mess(300);
}
 
 
//#######################################################################################
//
SIGNAL(SIG_ADC)
//#######################################################################################
{
static unsigned char kanal=0,state = 0;
static unsigned int gier1, roll1, nick1;
ANALOG_OFF;
switch(state++)
{
case 0:
gier1 = ADC;
kanal = 1;
ZaehlMessungen++;
break;
case 1:
roll1 = ADC;
kanal = 2;
break;
case 2:
nick1 = ADC;
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;
AdWertAccRoll = Aktuell_ay;
kanal = 7;
break;
case 5:
Aktuell_ax = ADC - NeutralAccX;
AdWertAccNick = Aktuell_ax;
kanal = 0;
break;
case 6:
if(PlatinenVersion == 10) AdWertGier = (ADC + gier1) / 2;
else AdWertGier = ADC + gier1;
kanal = 1;
break;
case 7:
if(PlatinenVersion == 10) AdWertRoll = (ADC + roll1) / 2;
else AdWertRoll = ADC + roll1;
kanal = 2;
break;
case 8:
if(PlatinenVersion == 10) AdWertNick = (ADC + nick1) / 2;
else AdWertNick = ADC + nick1;
kanal = 5;
break;
case 9:
AdWertAccHoch = (signed int) ADC - NeutralAccZ;
AdWertAccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4;
if(AdWertAccHoch > 1)
{
if(NeutralAccZ < 800) NeutralAccZ+= 0.02;
}
else if(AdWertAccHoch < -1)
{
if(NeutralAccZ > 600) NeutralAccZ-= 0.02;
}
messanzahl_AccHoch = 1;
Aktuell_az = ADC;
Mess_Integral_Hoch += AdWertAccHoch; // Integrieren
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
kanal = 3;
break;
case 10:
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;
if(state != 0) ANALOG_ON;
}
/branches/salvo_gps/Basis_v0067g/trunk/analog.h
0,0 → 1,24
/*#######################################################################################
 
#######################################################################################*/
 
extern volatile int UBat;
extern volatile int AdWertNick, AdWertRoll, AdWertGier;
extern volatile int AdWertAccRoll,AdWertAccNick,AdWertAccHoch;
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 volatile char MessanzahlNick;
 
unsigned int ReadADC(unsigned char adc_input);
void ADC_Init(void);
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
0,0 → 1,183
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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 = CFG_ACHSENKOPPLUNG_AKTIV;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV | CFG_KOMPASS_FIX;//0x01;
EE_Parameter.Hoehe_MinGas = 30;
EE_Parameter.MaxHoehe = 251; // Wert : 0-250 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 = 3; //2 // Wert : 1-6
//EE_Parameter.Stick_D = 8; //8 // Wert : 0-64
EE_Parameter.Stick_D = 4; //8 // Wert : 0-64 Salvo
EE_Parameter.Gier_P = 14; // 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 = 95; // 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 = 32;
EE_Parameter.UserParam1 = 90; // P Anteil GPS
EE_Parameter.UserParam2 = 24; // I Anteil GPS
EE_Parameter.UserParam3 = 130; //D Anteil GPS
EE_Parameter.UserParam4 = 0; //zur freien Verwendung
EE_Parameter.UserParam5 = 0; // zur freien Verwendung
EE_Parameter.UserParam6 = 0; // zur freien Verwendung
EE_Parameter.UserParam7 = 0; // zur freien Verwendung
EE_Parameter.UserParam8 = 0; // zur freien Verwendung
EE_Parameter.ServoNickControl = 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.LoopHysterese = 50;
EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
EE_Parameter.AchsKopplung1 = 100;
EE_Parameter.AchsGegenKopplung1 = 10;
EE_Parameter.WinkelUmschlagNick = 100;
EE_Parameter.WinkelUmschlagRoll = 100;
EE_Parameter.GyroAccAbgleich = 50; // 1/k
EE_Parameter.Driftkomp = 4;
EE_Parameter.DynamicStability = 100;
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 = CFG_ACHSENKOPPLUNG_AKTIV;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01;
EE_Parameter.Hoehe_MinGas = 30;
EE_Parameter.MaxHoehe = 251; // Wert : 0-250 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 = 4; //2 // Wert : 1-6
EE_Parameter.Stick_D = 0; //8 // Wert : 0-64
EE_Parameter.Gier_P = 10; // 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 = 175; //80 // Wert : 0-250
EE_Parameter.Gyro_I = 175; // Wert : 0-250
EE_Parameter.UnterspannungsWarnung = 100; // Wert : 0-250
EE_Parameter.NotGas = 95; // 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 = 32;
EE_Parameter.UserParam1 = 20 * 4; // zur freien Verwendung
EE_Parameter.UserParam2 = 0; // zur freien Verwendung
EE_Parameter.UserParam3 = 0; // zur freien Verwendung
EE_Parameter.UserParam4 = 0; // zur freien Verwendung
EE_Parameter.UserParam5 = 0; // zur freien Verwendung
EE_Parameter.UserParam6 = 0; // zur freien Verwendung
EE_Parameter.UserParam7 = 0; // zur freien Verwendung
EE_Parameter.UserParam8 = 0; // zur freien Verwendung
EE_Parameter.ServoNickControl = 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.LoopHysterese = 50;
EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts
EE_Parameter.AchsKopplung1 = 100; // Faktor, mit dem Gier die Achsen Roll und Nick verkoppelt
EE_Parameter.AchsGegenKopplung1 = 10;
EE_Parameter.WinkelUmschlagNick = 100;
EE_Parameter.WinkelUmschlagRoll = 100;
EE_Parameter.GyroAccAbgleich = 100; // 1/k
EE_Parameter.Driftkomp = 4;
EE_Parameter.DynamicStability = 75;
memcpy(EE_Parameter.Name, "Normal\0", 12);
}
 
void DefaultKonstanten3(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 = CFG_DREHRATEN_BEGRENZER | CFG_ACHSENKOPPLUNG_AKTIV;///*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01;
EE_Parameter.Hoehe_MinGas = 30;
EE_Parameter.MaxHoehe = 251; // Wert : 0-250 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 = 3; //2 // Wert : 1-6
EE_Parameter.Stick_D = 0; //8 // Wert : 0-64
EE_Parameter.Gier_P = 8; // 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 = 200; //80 // Wert : 0-250
EE_Parameter.Gyro_I = 175; // Wert : 0-250
EE_Parameter.UnterspannungsWarnung = 100; // Wert : 0-250
EE_Parameter.NotGas = 95; // 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 = 10;
EE_Parameter.UserParam1 = 20 * 4; // zur freien Verwendung
EE_Parameter.UserParam2 = 0; // zur freien Verwendung
EE_Parameter.UserParam3 = 0; // zur freien Verwendung
EE_Parameter.UserParam4 = 0; // zur freien Verwendung
EE_Parameter.UserParam5 = 0; // zur freien Verwendung
EE_Parameter.UserParam6 = 0; // zur freien Verwendung
EE_Parameter.UserParam7 = 0; // zur freien Verwendung
EE_Parameter.UserParam8 = 0; // zur freien Verwendung
EE_Parameter.ServoNickControl = 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.LoopHysterese = 50;
EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts
EE_Parameter.AchsKopplung1 = 100; // Faktor, mit dem Gier die Achsen Roll und Nick verkoppelt
EE_Parameter.AchsGegenKopplung1 = 10;
EE_Parameter.WinkelUmschlagNick = 100;
EE_Parameter.WinkelUmschlagRoll = 100;
EE_Parameter.GyroAccAbgleich = 100; // 1/k
EE_Parameter.Driftkomp = 4;
EE_Parameter.DynamicStability = 50;
memcpy(EE_Parameter.Name, "Beginner\0", 12);
}
/branches/salvo_gps/Basis_v0067g/trunk/fc.c
0,0 → 1,1384
/*#######################################################################################
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 9.11.2008
/*
Driftkompensation fuer Gyros verbessert
Linearsensor optional mit fixem Neutralwert
Ersatzkompass abgeleitet aus Magnetkompass und Giergyro fuer nahezu neigungsunabhaengige Kompassfunktion
*/
 
#include "main.h"
#include "eeprom.c"
 
unsigned char h,m,s;
volatile unsigned int I2CTimeout = 100;
volatile int MesswertNick,MesswertRoll,MesswertGier;
volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 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 IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 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 MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2;
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;
long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L;
 
//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
int w,v;
//Salvo End
 
//Salvo 15.12.2007 Ersatzkompass und Giergyrokompensation
long GyroKomp_Int;
long int GyroGier_Comp;
int GyroKomp_Value; // Der ermittelte Kompasswert aus Gyro und Magnetkompass
short int cnt_stickgier_zero =0;
int gyrogier_kompass;
//Salvo End
 
//Salvo 2.1.2008 Allgemeine Debugvariablen
int debug_gp_0,debug_gp_1,debug_gp_2,debug_gp_3,debug_gp_4,debug_gp_5,debug_gp_6,debug_gp_7;
//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;
int LageKorrekturRoll = 0,LageKorrekturNick = 0;
float Ki = FAKTOR_I;
unsigned char Looping_Nick = 0,Looping_Roll = 0;
unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0;
 
unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250
unsigned char Parameter_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 = 150; // 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_UserParam5 = 0;
unsigned char Parameter_UserParam6 = 0;
unsigned char Parameter_UserParam7 = 0;
unsigned char Parameter_UserParam8 = 0;
unsigned char Parameter_ServoNickControl = 100;
unsigned char Parameter_LoopGasLimit = 70;
unsigned char Parameter_AchsKopplung1 = 0;
unsigned char Parameter_AchsGegenKopplung1 = 0;
unsigned char Parameter_DynamicStability = 100;
struct mk_param_struct EE_Parameter;
signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20;
 
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)
//############################################################################
{
// Salvo 9.12.2007
RX_SWTCH_ON; //GPS Daten auf RX eingang schalten
// Salvo End
NeutralAccX = 0;
NeutralAccY = 0;
NeutralAccZ = 0;
AdNeutralNick = 0;
AdNeutralRoll = 0;
AdNeutralGier = 0;
Parameter_AchsKopplung1 = 0;
Parameter_AchsGegenKopplung1 = 0;
CalibrierMittelwert();
Delay_ms_Mess(100);
CalibrierMittelwert();
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
{
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
}
 
AdNeutralNick= AdWertNick;
AdNeutralRoll= AdWertRoll;
AdNeutralGier= AdWertGier;
StartNeutralRoll = AdNeutralRoll;
StartNeutralNick = AdNeutralNick;
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) > 4)
{
NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY;
NeutralAccZ = Aktuell_az;
}
else
{
NeutralAccX = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1]);
NeutralAccY = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL+1]);
NeutralAccZ = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_Z]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_Z+1]);
}
Mess_IntegralNick = 0;
Mess_IntegralNick2 = 0;
Mess_IntegralRoll = 0;
Mess_IntegralRoll2 = 0;
Mess_Integral_Gier = 0;
MesswertNick = 0;
MesswertRoll = 0;
MesswertGier = 0;
GyroGier_Comp =0;
StartLuftdruck = Luftdruck;
HoeheD = 0;
Mess_Integral_Hoch = 0;
KompassStartwert = KompassValue;
GPS_Neutral();
beeptime = 50;
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L;
ExternHoehenValue = 0;
 
 
//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
}
 
//############################################################################
// Bearbeitet die Messwerte
void Mittelwert(void)
//############################################################################
{
static signed long tmpl,tmpl2;
MesswertGier = (signed int) AdNeutralGier - AdWertGier;
MesswertRoll = (signed int) AdWertRoll - AdNeutralRoll;
MesswertNick = (signed int) AdWertNick - AdNeutralNick;
 
// Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++
Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L;
Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 1 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 2L;
Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L;
IntegralAccNick += ACC_AMPLIFY * AdWertAccNick;
IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll;
IntegralAccZ += Aktuell_az - NeutralAccZ;
// Gier ++++++++++++++++++++++++++++++++++++++++++++++++
//Salvo 12.11.2007
GyroKomp_Int += (long)MesswertGier;
GyroGier_Comp += (long)MesswertGier;
//Salvo End
Mess_Integral_Gier += MesswertGier;
Mess_Integral_Gier2 += MesswertGier;
// Kopplungsanteil +++++++++++++++++++++++++++++++++++++
if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV))
{
tmpl = Mess_IntegralNick / 4096L;
tmpl *= MesswertGier;
tmpl *= Parameter_AchsKopplung1; //125
tmpl /= 2048L;
tmpl2 = Mess_IntegralRoll / 4096L;
tmpl2 *= MesswertGier;
tmpl2 *= Parameter_AchsKopplung1;
tmpl2 /= 2048L;
}
else tmpl = tmpl2 = 0;
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++
MesswertRoll += tmpl;
MesswertRoll += (tmpl2*Parameter_AchsGegenKopplung1)/512L; //109
Mess_IntegralRoll2 += MesswertRoll;
Mess_IntegralRoll += MesswertRoll - LageKorrekturRoll;
if(Mess_IntegralRoll > Umschlag180Roll)
{
Mess_IntegralRoll = -(Umschlag180Roll - 10000L);
Mess_IntegralRoll2 = Mess_IntegralRoll;
}
if(Mess_IntegralRoll <-Umschlag180Roll)
{
Mess_IntegralRoll = (Umschlag180Roll - 10000L);
Mess_IntegralRoll2 = Mess_IntegralRoll;
}
if(AdWertRoll < 15) MesswertRoll = -1000;
if(AdWertRoll < 7) MesswertRoll = -2000;
if(PlatinenVersion == 10)
{
if(AdWertRoll > 1010) MesswertRoll = +1000;
if(AdWertRoll > 1017) MesswertRoll = +2000;
}
else
{
if(AdWertRoll > 2020) MesswertRoll = +1000;
if(AdWertRoll > 2034) MesswertRoll = +2000;
}
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++
MesswertNick -= tmpl2;
MesswertNick -= (tmpl*Parameter_AchsGegenKopplung1)/512L;
Mess_IntegralNick2 += MesswertNick;
Mess_IntegralNick += MesswertNick - LageKorrekturNick;
if(Mess_IntegralNick > Umschlag180Nick)
{
Mess_IntegralNick = -(Umschlag180Nick - 10000L);
Mess_IntegralNick2 = Mess_IntegralNick;
}
if(Mess_IntegralNick <-Umschlag180Nick)
{
Mess_IntegralNick = (Umschlag180Nick - 10000L);
Mess_IntegralNick2 = Mess_IntegralNick;
}
if(AdWertNick < 15) MesswertNick = -1000;
if(AdWertNick < 7) MesswertNick = -2000;
if(PlatinenVersion == 10)
{
if(AdWertNick > 1010) MesswertNick = +1000;
if(AdWertNick > 1017) MesswertNick = +2000;
}
else
{
if(AdWertNick > 2020) MesswertNick = +1000;
if(AdWertNick > 2034) MesswertNick = +2000;
}
//++++++++++++++++++++++++++++++++++++++++++++++++
// ADC einschalten
ANALOG_ON;
//++++++++++++++++++++++++++++++++++++++++++++++++
 
Integral_Gier = Mess_Integral_Gier;
IntegralNick = Mess_IntegralNick;
IntegralRoll = Mess_IntegralRoll;
IntegralNick2 = Mess_IntegralNick2;
IntegralRoll2 = Mess_IntegralRoll2;
 
if(EE_Parameter.GlobalConfig & CFG_DREHRATEN_BEGRENZER && !Looping_Nick && !Looping_Roll)
{
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;
MesswertNick = AdWertNick;
MesswertRoll = AdWertRoll;
MesswertGier = AdWertGier;
Mittelwert_AccNick = ACC_AMPLIFY * (long)AdWertAccNick;
Mittelwert_AccRoll = ACC_AMPLIFY * (long)AdWertAccRoll;
Mittelwert_AccHoch = (long)AdWertAccHoch;
// 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;
 
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
}
 
//############################################################################
// 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();
}
 
 
//############################################################################
// 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_UserParam5,EE_Parameter.UserParam5,0,255);
CHK_POTI(Parameter_UserParam6,EE_Parameter.UserParam6,0,255);
CHK_POTI(Parameter_UserParam7,EE_Parameter.UserParam7,0,255);
CHK_POTI(Parameter_UserParam8,EE_Parameter.UserParam8,0,255);
CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit,0,255);
CHK_POTI(Parameter_AchsKopplung1, EE_Parameter.AchsKopplung1,0,255);
CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255);
CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability,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;
static long IntegralFehlerNick = 0;
static long IntegralFehlerRoll = 0;
static unsigned int RcLostTimer;
static unsigned char delay_neutral = 0;
static unsigned char delay_einschalten = 0,delay_ausschalten = 0;
static unsigned int modell_fliegt = 0;
static int hoehenregler = 0;
static char TimerWerteausgabe = 0;
static char NeueKompassRichtungMerken = 0;
static long ausgleichNick, ausgleichRoll;
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;
if(GasMischanteil > MAX_GAS - 20) GasMischanteil = MAX_GAS - 20;
//Salvo 13.10.2007 langsame Gasreduktion bei Unterspannung. Als Ausgangswert wird der bei UBAT=k gemessen Mittelwert genommen
// und dieser dann langsam zwangsweise reduziert
if (UBat <= EE_Parameter.UnterspannungsWarnung - 4) //Unterhalb der Piepser Schwelle aktivieren
{
if (ubat_cnt > 1000)
{
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;
}
// 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
{
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)
{
unsigned char setting=1;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5;
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 = 1000;
Delay_ms(500);
}
}
}
else
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) // ACC Neutralwerte speichern
{
if(++delay_neutral > 200) // nicht sofort
{
GRN_OFF;
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK],0xff); // Werte löschen
MotorenEin = 0;
delay_neutral = 0;
modell_fliegt = 0;
SetNeutral();
if (ACC_FIXED > 0)
{
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK],ACC_NICK_NEUTRAL / 256); // ACC-NeutralWerte speichern
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1],ACC_NICK_NEUTRAL % 256); // ACC-NeutralWerte speichern
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL],ACC_ROLL_NEUTRAL / 256);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL+1],ACC_ROLL_NEUTRAL % 256);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_Z],(int)ACC_Z_NEUTRAL / 256);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_Z+1],(int)ACC_Z_NEUTRAL % 256);
}
else
{
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK],NeutralAccX / 256); // ACC-NeutralWerte speichern
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1],NeutralAccX % 256); // ACC-NeutralWerte speichern
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL],NeutralAccY / 256);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL+1],NeutralAccY % 256);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_Z],(int)NeutralAccZ / 256);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_Z+1],(int)NeutralAccZ % 256);
}
Piep(GetActiveParamSetNumber());
}
}
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)
{
int n;
// Salvo 9.12.2007
RX_SWTCH_ON; //GPS Daten auf RX eingang schalten
// Salvo End
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;
n= GPS_CRTL(GPS_CMD_STOP); //GPS Lageregelung beenden
}
}
else delay_einschalten = 0;
//Auf Neutralwerte setzen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Auschalten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75)
{
if(++delay_ausschalten > 200) // nicht sofort
{
// Salvo 9.12.2007
RX_SWTCH_OFF; //Bluetooth Daten auf RX eingang schalten
// Salvo End
MotorenEin = 0;
delay_ausschalten = 200;
modell_fliegt = 0;
}
}
else delay_ausschalten = 0;
}
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// neue Werte von der Funke
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!NewPpmData-- || Notlandung)
{
int tmp_int;
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;
 
#define KEY_VALUE (Parameter_UserParam1 * 4) //(Poti3 * 8)
if(DubWiseKeys[1]) beeptime = 10;
if(DubWiseKeys[1] & DUB_KEY_UP) tmp_int = KEY_VALUE; else
if(DubWiseKeys[1] & DUB_KEY_DOWN) tmp_int = -KEY_VALUE; else tmp_int = 0;
ExternStickNick = (ExternStickNick * 7 + tmp_int) / 8;
if(DubWiseKeys[1] & DUB_KEY_LEFT) tmp_int = KEY_VALUE; else
if(DubWiseKeys[1] & DUB_KEY_RIGHT) tmp_int = -KEY_VALUE; else tmp_int = 0;
ExternStickRoll = (ExternStickRoll * 7 + tmp_int) / 8;
 
if(DubWiseKeys[0] & 8) ExternStickGier = 50;else
if(DubWiseKeys[0] & 4) ExternStickGier =-50;else ExternStickGier = 0;
if(DubWiseKeys[0] & 2) ExternHoehenValue++;
if(DubWiseKeys[0] & 16) ExternHoehenValue--;
 
StickNick += ExternStickNick / 8;
StickRoll += ExternStickRoll / 8;
StickGier += ExternStickGier;
 
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) Looping_Links = 1;
else
{
{
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Links = 0;
}
}
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < -EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_RECHTS) Looping_Rechts = 1;
else
{
if(Looping_Rechts) // Hysterese
{
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Rechts = 0;
}
}
 
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_OBEN) Looping_Oben = 1;
else
{
if(Looping_Oben) // Hysterese
{
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Oben = 0;
}
}
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_UNTEN) Looping_Unten = 1;
else
{
if(Looping_Unten) // Hysterese
{
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Unten = 0;
}
}
 
if(Looping_Links || Looping_Rechts) Looping_Roll = 1; else Looping_Roll = 0;
if(Looping_Oben || Looping_Unten) {Looping_Nick = 1; Looping_Roll = 0; Looping_Links = 0; Looping_Rechts = 0;} else Looping_Nick = 0;
} // Ende neue Funken-Werte
 
if(Looping_Roll) beeptime = 100;
if(Looping_Roll || Looping_Nick)
{
if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Bei Empfangsausfall im Flug
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(Notlandung)
{
StickGier = 0;
StickNick = 0;
StickRoll = 0;
GyroFaktor = 0.1;
IntegralFaktor = 0.005;
Looping_Roll = 0;
Looping_Nick = 0;
}
 
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Integrale auf ACC-Signal abgleichen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define ABGLEICH_ANZAHL 256L
 
MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren
MittelIntegralRoll += IntegralRoll;
MittelIntegralNick2 += IntegralNick2;
MittelIntegralRoll2 += IntegralRoll2;
 
if(Looping_Nick || Looping_Roll)
{
IntegralAccNick = 0;
IntegralAccRoll = 0;
MittelIntegralNick = 0;
MittelIntegralRoll = 0;
MittelIntegralNick2 = 0;
MittelIntegralRoll2 = 0;
Mess_IntegralNick2 = Mess_IntegralNick;
Mess_IntegralRoll2 = Mess_IntegralRoll;
ZaehlMessungen = 0;
LageKorrekturNick = 0;
LageKorrekturRoll = 0;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!Looping_Nick && !Looping_Roll)
{
long tmp_long, tmp_long2;
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick);
tmp_long /= 16;
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll);
tmp_long2 /= 16;
#define AUSGLEICH 32 //(Parameter_UserParam1 / 2)
if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH;
if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH;
if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH;
if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH;
Mess_IntegralNick -= tmp_long;
Mess_IntegralRoll -= tmp_long2;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
if(ZaehlMessungen >= ABGLEICH_ANZAHL)
{
static int cnt = 0;
static char last_n_p,last_n_n,last_r_p,last_r_n;
static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt;
if(!Looping_Nick && !Looping_Roll)
{
MittelIntegralNick /= ABGLEICH_ANZAHL;
MittelIntegralRoll /= ABGLEICH_ANZAHL;
IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL;
IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL;
IntegralAccZ = IntegralAccZ / ABGLEICH_ANZAHL;
#define MAX_I 0//(Poti2/10)
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++
IntegralFehlerNick = (long)(MittelIntegralNick - (long)IntegralAccNick);
ausgleichNick = IntegralFehlerNick / EE_Parameter.GyroAccAbgleich;
LageKorrekturNick = ausgleichNick / ABGLEICH_ANZAHL;
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++
IntegralFehlerRoll = (long)(MittelIntegralRoll - (long)IntegralAccRoll);
ausgleichRoll = IntegralFehlerRoll / EE_Parameter.GyroAccAbgleich;
LageKorrekturRoll = ausgleichRoll / ABGLEICH_ANZAHL;
 
// Mess_IntegralNick -= ausgleichNick;
// Mess_IntegralRoll -= ausgleichRoll;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gyro-Drift ermitteln
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MittelIntegralNick2 /= ABGLEICH_ANZAHL;
MittelIntegralRoll2 /= ABGLEICH_ANZAHL;
// tmp_long = (long)(MittelIntegralNick2 - (long)IntegralAccNick);
// tmp_long2 = (long)(MittelIntegralRoll2 - (long)IntegralAccRoll);
tmp_long = IntegralNick2 - IntegralNick;
tmp_long2 = IntegralRoll2 - IntegralRoll;
//DebugOut.Analog[25] = MittelIntegralRoll2 / 26;
 
IntegralFehlerNick = tmp_long;
IntegralFehlerRoll = tmp_long2;
Mess_IntegralNick2 -= IntegralFehlerNick;
Mess_IntegralRoll2 -= IntegralFehlerRoll;
 
// IntegralFehlerNick = (IntegralFehlerNick * 1 + tmp_long) / 2;
// IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2;
 
//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
ROT_OFF;
// Salvo End
 
/*DebugOut.Analog[17] = IntegralAccNick / 26;
DebugOut.Analog[18] = IntegralAccRoll / 26;
DebugOut.Analog[19] = IntegralFehlerNick;// / 26;
DebugOut.Analog[20] = IntegralFehlerRoll;// / 26;
DebugOut.Analog[21] = MittelIntegralNick / 26;
DebugOut.Analog[22] = MittelIntegralRoll / 26;
DebugOut.Analog[28] = ausgleichNick;
DebugOut.Analog[29] = ausgleichRoll;
DebugOut.Analog[30] = LageKorrekturRoll * 10;
*/
 
#define FEHLER_LIMIT (ABGLEICH_ANZAHL * 4)
#define FEHLER_LIMIT2 (ABGLEICH_ANZAHL * 16)
#define BEWEGUNGS_LIMIT 20000
// Nick +++++++++++++++++++++++++++++++++++++++++++++++++
cnt = 1;// + labs(IntegralFehlerNick) / 4096;
if(labs(MittelIntegralNick_Alt - MittelIntegralNick) < BEWEGUNGS_LIMIT)
{
if(IntegralFehlerNick > FEHLER_LIMIT2)
{
if(last_n_p)
{
cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2;
ausgleichNick = IntegralFehlerNick / 8;
if(ausgleichNick > 5000) ausgleichNick = 5000;
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL;
}
else last_n_p = 1;
} else last_n_p = 0;
if(IntegralFehlerNick < -FEHLER_LIMIT2)
{
if(last_n_n)
{
cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2;
ausgleichNick = IntegralFehlerNick / 8;
if(ausgleichNick < -5000) ausgleichNick = -5000;
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL;
}
else last_n_n = 1;
} else last_n_n = 0;
} else cnt = 0;
//Salvo 26.12.2007
w = (abs(Mittelwert_AccNick));
v = (abs(Mittelwert_AccRoll));
if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) // Gyro nur in annaehend waagrechter Lage nachtrimmen
{
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt;
if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt;
}
//Salvo End
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++
cnt = 1;// + labs(IntegralFehlerNick) / 4096;
 
ausgleichRoll = 0;
if(labs(MittelIntegralRoll_Alt - MittelIntegralRoll) < BEWEGUNGS_LIMIT)
{
if(IntegralFehlerRoll > FEHLER_LIMIT2)
{
if(last_r_p)
{
cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2;
ausgleichRoll = IntegralFehlerRoll / 8;
if(ausgleichRoll > 5000) ausgleichRoll = 5000;
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL;
}
else last_r_p = 1;
} else last_r_p = 0;
if(IntegralFehlerRoll < -FEHLER_LIMIT2)
{
if(last_r_n)
{
cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2;
ausgleichRoll = IntegralFehlerRoll / 8;
if(ausgleichRoll < -5000) ausgleichRoll = -5000;
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL;
}
else last_r_n = 1;
} else last_r_n = 0;
} else
{
cnt = 0;
}
//Salvo 26.12.2007
if ((w < ACC_WAAGRECHT_LIMIT*2) && (v < ACC_WAAGRECHT_LIMIT*2)) // Gyro nur inannaehernd waagrechter Lage nachtrimmen
{
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt;
if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt;
}
//Salvo End
//DebugOut.Analog[23] = AdNeutralNick;//10*(AdNeutralNick - StartNeutralNick);
//DebugOut.Analog[24] = 10*(AdNeutralRoll - StartNeutralRoll);
}
else
{
LageKorrekturRoll = 0;
LageKorrekturNick = 0;
}
if(!IntegralFaktor) { LageKorrekturRoll = 0; LageKorrekturNick = 0;} // z.B. bei HH
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
MittelIntegralNick_Alt = MittelIntegralNick;
MittelIntegralRoll_Alt = MittelIntegralRoll;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
IntegralAccNick = 0;
IntegralAccRoll = 0;
IntegralAccZ = 0;
MittelIntegralNick = 0;
MittelIntegralRoll = 0;
MittelIntegralNick2 = 0;
MittelIntegralRoll2 = 0;
ZaehlMessungen = 0;
} // Ende Abgleich
 
// Salvo Ersatzkompass und Giergyrokompensation 15.12.2007 **********************
if ((Kompass_Neuer_Wert > 0)) //nur wenn Kompass einen neuen Wert geliefert hat
{
Kompass_Neuer_Wert = 0;
w = (abs(Mittelwert_AccNick));
v = (abs(Mittelwert_AccRoll));
if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) //Ersatzkompass und Giergyro nur mit Magnetkompass aktualisieren wenn alles ok
{
if ((abs(KompassValue - Kompass_Value_Old)) <= 5) // Aufeinanderfolgende Werte duerfen nur minimal abweichen
{
 
if ((abs(StickGier) < 20)) //Giergyroabgleich mit Kompass
{
if (cnt_stickgier_zero < 255) cnt_stickgier_zero += 1;
if (cnt_stickgier_zero > 2) // nur Abgleichen wenn keine Stickbewegung da
{
w = (int) (GyroGier_Comp/(long)GYROKOMP_INC_GRAD_DEFAULT);
v = KompassValue - gyrogier_kompass; // realen Drehwinkel seit letztem Ruecksetzen von GyroGier_Comp bestimmen
if (v <-180) v +=360; // Uberlaufkorrektur
if (v > 180) v -=360; // Uberlaufkorrektur
 
v = w-v; //Differenz Gyro zu Kompass ist der Driftfehler
 
#define GIER_COMP_MAX 8
if (v > GIER_COMP_MAX) v= GIER_COMP_MAX;
if (v < -GIER_COMP_MAX) v= - GIER_COMP_MAX;
if (abs(w) > 1)
{
GyroGier_Comp = 0;
gyrogier_kompass = KompassValue; // Kompasswert merken
AdNeutralGier -= v;
}
}
}
else
{
gyrogier_kompass = KompassValue; // Kompasswert merken
cnt_stickgier_zero = 0;
GyroGier_Comp = 0;
}
 
magkompass_ok = 1; // Flag dass Magnetkompass stabil arbeitet
GyroKomp_Int = (GyroKomp_Int )/(long)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 + 360L;
GyroKomp_Int = (GyroKomp_Int%360L) * (long)GYROKOMP_INC_GRAD_DEFAULT; // An Magnetkompasswert annaehern
}
}
else //Kompassfehler
{
magkompass_ok = 0;
GyroGier_Comp = 0;
}
Kompass_Value_Old = KompassValue;
}
// 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(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]) < GPS_STICK_HOLDOFF)
&& (abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 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
{
if (gps_cmd != GPS_CMD_STOP)
{
gps_cmd = GPS_CMD_STOP;
n= GPS_CRTL(gps_cmd); //GPS Lageregelung beenden
}
}
if (gps_state != GPS_CRTL_IDLE) if (TimerWerteausgabe == 12) LED_J16_OFF; //led im GPS Mode schnell blinken lassen
 
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(abs(StickGier) > 20) // war 35
{
if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1;
}
tmp_int = (long) EE_Parameter.Gier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx²
tmp_int += (EE_Parameter.Gier_P * StickGier) / 4;
sollGier = tmp_int;
Mess_Integral_Gier -= tmp_int;
if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen
if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000;
 
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Kompass
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(KompassValue && (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)
{
// Salvo Kompasssteuerung **********************
if (magkompass_ok > 0) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten
// Salvo End
}
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Debugwerte zuordnen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!TimerWerteausgabe--)
{
TimerWerteausgabe = 24;
 
// Salvo 13.12.2007 Beleuchtung steuern
if (!(beeptime & BeepMuster)) LED_J16_FLASH;
else if (MotorenEin) LED_J16_ON;
else LED_J16_OFF;
// Salvo End
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[10] = GPS_dist_2trgt/10;
// DebugOut.Analog[11] = GPS_hdng_rel_2trgt;
DebugOut.Analog[10] = Parameter_UserParam1;
DebugOut.Analog[11] = Parameter_UserParam3;
DebugOut.Analog[24] = GPS_Nick;
DebugOut.Analog[25] = GPS_Roll;
DebugOut.Analog[26] = gps_rel_act_position.utm_east; //in 10cm ausgeben
DebugOut.Analog[27] = gps_rel_act_position.utm_north;
DebugOut.Analog[28] = gps_rel_act_position.utm_alt;
DebugOut.Analog[29] = gps_state + (gps_sub_state*10)+(50*gps_cmd);
DebugOut.Analog[30] = debug_gp_0;
DebugOut.Analog[31] = debug_gp_1;
/* DebugOut.Analog[12] = debug_gp_2;
DebugOut.Analog[13] = debug_gp_3;
DebugOut.Analog[14] = debug_gp_4;
DebugOut.Analog[15] = debug_gp_5;
*/
// DebugOut.Analog[30] = dist_flown;
// DebugOut.Analog[31] = (int) dist_2home;
// DebugOut.Analog[31] = (int) GPS_hdng_abs_2trgt;
// DebugOut.Analog[31] = (int) GyroGier_Comp;
/*
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;
 
//DebugOut.Analog[28] = MesswertRoll;
//DebugOut.Analog[25] = IntegralRoll * IntegralFaktor;
//DebugOut.Analog[31] = StickRoll;// / (26*IntegralFaktor);
 
// 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 = ((int) ExternHoehenValue + (int) Parameter_MaxHoehe) * (int)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 > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2;
if(GierMischanteil < -(GasMischanteil / 2)) GierMischanteil = -(GasMischanteil / 2);
if(GierMischanteil > ((MAX_GAS - GasMischanteil))) GierMischanteil = ((MAX_GAS - GasMischanteil));
if(GierMischanteil < -((MAX_GAS - GasMischanteil))) GierMischanteil = -((MAX_GAS - GasMischanteil));
 
if(GasMischanteil < 20) GierMischanteil = 0;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Nick-Achse
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DiffNick = MesswertNick - (StickNick - GPS_Nick); // Differenz bestimmen
if(IntegralFaktor) SummeNick += IntegralNick * IntegralFaktor - (StickNick - GPS_Nick); // I-Anteil bei Winkelregelung
else SummeNick += DiffNick; // I-Anteil bei HH
if(SummeNick > 0) SummeNick-= 2 ; else SummeNick += 2 ;
if(SummeNick > 16000) SummeNick = 16000;
if(SummeNick < -16000) SummeNick = -16000;
pd_ergebnis = DiffNick + Ki * SummeNick; // PI-Regler für Nick
// Motor Vorn
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64;
if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int;
if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int;
 
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 = MesswertRoll - (StickRoll - GPS_Roll); // Differenz bestimmen
if(IntegralFaktor) SummeRoll += IntegralRoll * IntegralFaktor - (StickRoll - GPS_Roll);// I-Anteil bei Winkelregelung
else SummeRoll += DiffRoll; // I-Anteil bei HH
if(SummeRoll > 0) SummeRoll-= 2 ; else SummeRoll += 2 ;
if(SummeRoll > 16000) SummeRoll = 16000;
if(SummeRoll < -16000) SummeRoll = -16000;
pd_ergebnis = DiffRoll + Ki * SummeRoll; // PI-Regler für Roll
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64;
if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int;
if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int;
// 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,169
/*#######################################################################################
Flight Control
#######################################################################################*/
 
#ifndef _FC_H
#define _FC_H
 
extern volatile unsigned int I2CTimeout;
//Salvo 9.12.2007 Neutralwerte fuer ACC Sensor nur verwendet wenn ACC_FIXED >0
#define ACC_FIXED 0 // wenn > 0werden diese Werte beim ACC Kalbibrieren ins Eeprom geschrieben
#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_Z_NEUTRAL 740 // ADC Wandler wert in Neutrallage (0g)
#define ACC_WAAGRECHT_LIMIT 100 // Nick und Roll kleiner als dieser Wert gelten als Kriterium fuer waagrechte Lage
 
#define CAM_GPS_QUIET 0 // wenn dieses Flag gesetzt ist, wird GPS beim Ausloesen kurzzeitig deaktiviert um eine ruhige Lage zu bekommen
 
//Salvo 2.9.2007 Ersatzkompass: Gyroincrements/Grad als Defaultwert *****
// Laut Datenblatt sind di; Werte ueber Zeit und Temperatur sehr stabil.
#define GYROKOMP_INC_GRAD_DEFAULT 1300 // Gyroincrements/Grad als Defaultwert
// Salvo End
 
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 IntegralAccNick,IntegralAccRoll;
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;
extern long Umschlag180Nick, Umschlag180Roll;
extern signed int ExternStickNick,ExternStickRoll,ExternStickGier;
extern unsigned char Parameter_UserParam1,Parameter_UserParam2,Parameter_UserParam3,Parameter_UserParam4,Parameter_UserParam5,Parameter_UserParam6,Parameter_UserParam7,Parameter_UserParam8;
 
//Salvo 2.1.2008 Debugvariablens
extern int debug_gp_0,debug_gp_1,debug_gp_2,debug_gp_3,debug_gp_4,debug_gp_5,debug_gp_6,debug_gp_7; //Allgemeine Debugvariablen
//Salvo End
 
//Salvo 2.9.2007 Ersatzkompass
extern long GyroKomp_Int;
extern long int GyroGier_Comp;
extern int GyroKomp_Inc_Grad;
extern 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);
void Piep(unsigned char Anzahl);
extern void DefaultKonstanten(void);
void DefaultKonstanten1(void);
void DefaultKonstanten2(void);
 
extern unsigned char h,m,s;
extern volatile unsigned char Timeout ;
extern unsigned char CosinusNickWinkel, CosinusRollWinkel;
extern volatile long IntegralNick,IntegralNick2;
extern volatile long IntegralRoll,IntegralRoll2;
extern volatile long Integral_Gier;
extern volatile long Mess_IntegralNick,Mess_IntegralNick2;
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
extern volatile long Mess_Integral_Gier;
extern volatile int DiffNick,DiffRoll;
extern int Poti1, Poti2, Poti3, Poti4;
extern volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
extern unsigned char MotorWert[5];
extern volatile unsigned char SenderOkay;
extern int StickNick,StickRoll,StickGier;
extern char MotorenEin;
extern void DefaultKonstanten1(void);
extern void DefaultKonstanten2(void);
 
#define STRUCT_PARAM_LAENGE 71
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 LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag
unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
unsigned char AchsGegenKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick Gegenkoppelt (NickRollGegenkopplung)
unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt
unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt
unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung)
unsigned char Driftkomp;
unsigned char DynamicStability;
unsigned char UserParam5; // Wert : 0-250
unsigned char UserParam6; // Wert : 0-250
unsigned char UserParam7; // Wert : 0-250
unsigned char UserParam8; // Wert : 0-250
 
//------------------------------------------------
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;
extern unsigned char Parameter_AchsKopplung1;
extern unsigned char Parameter_AchsGegenKopplung1;
 
 
#endif //_FC_H