From 12e2af9cd76abfe7c35d6e4c38cfb62016e1a23e Mon Sep 17 00:00:00 2001 From: Zach Eveland Date: Tue, 7 Feb 2012 23:46:31 -0500 Subject: fixed bug in Caterina which caused some programming instructions to fail Timer 1 interrupts were trashing self-programming timing. Now disable Timer 1 compare match before doing Flash tasks and reenable afterward. --- bootloaders/caterina_LUFA/Caterina.c | 28 +- bootloaders/caterina_LUFA/Caterina.hex | 458 +++++++++++++++++---------------- 2 files changed, 251 insertions(+), 235 deletions(-) (limited to 'bootloaders') diff --git a/bootloaders/caterina_LUFA/Caterina.c b/bootloaders/caterina_LUFA/Caterina.c index 326bce7..11404a7 100755 --- a/bootloaders/caterina_LUFA/Caterina.c +++ b/bootloaders/caterina_LUFA/Caterina.c @@ -121,7 +121,7 @@ int main(void) CDC_Task(); USB_USBTask(); /* Time out and start the sketch if one is present */ - if (Timeout > 16000 && pgm_read_word(0) != 0xFFFF) + if (Timeout > 16000) RunBootloader = false; LEDPulse(); @@ -154,11 +154,16 @@ void SetupHardware(void) TX_LED_OFF(); RX_LED_OFF(); - /* Initialize TIMER1 to handle bootloader timeout and LED tasks. Compare match happens at approx. 1 ms interval */ + /* Initialize TIMER1 to handle bootloader timeout and LED tasks. + * With 16 MHz clock and 1/64 prescaler, timer 1 is clocked at 250 kHz + * Our chosen compare match generates an interrupt every 1 ms. + * This interrupt is disabled selectively when doing memory reading, erasing, + * or writing since SPM has tight timing requirements. + */ OCR1AH = 0; OCR1AL = 250; - TIMSK1 = (1 << OCIE1A); - TCCR1B = ((1 << CS11) | (1 << CS10)); + TIMSK1 = (1 << OCIE1A); // enable timer 1 output compare A match interrupt + TCCR1B = ((1 << CS11) | (1 << CS10)); // 1/64 prescaler on timer 1 input /* Initialize USB Subsystem */ USB_Init(); @@ -176,8 +181,9 @@ ISR(TIMER1_COMPA_vect, ISR_BLOCK) TX_LED_OFF(); if (RxLEDPulse && !(--RxLEDPulse)) RX_LED_OFF(); - - Timeout++; + + if (pgm_read_word(0) != 0xFFFF) + Timeout++; } /** Event handler for the USB_ConfigurationChanged event. This configures the device's endpoints ready @@ -267,9 +273,13 @@ static void ReadWriteMemoryBlock(const uint8_t Command) return; } + /* Disable timer 1 interrupt - can't afford to process nonessential interrupts + * while doing SPM tasks */ + TIMSK1 = 0; + /* Check if command is to read memory */ if (Command == 'g') - { + { /* Re-enable RWW section */ boot_rww_enable(); @@ -353,6 +363,9 @@ static void ReadWriteMemoryBlock(const uint8_t Command) /* Send response byte back to the host */ WriteNextResponseByte('\r'); } + + /* Re-enable timer 1 interrupt disabled earlier in this routine */ + TIMSK1 = (1 << OCIE1A); } #endif @@ -555,6 +568,7 @@ void CDC_Task(void) } else if ((Command == 'B') || (Command == 'g')) { + Timeout = 0; // Delegate the block write/read to a separate function for clarity ReadWriteMemoryBlock(Command); } diff --git a/bootloaders/caterina_LUFA/Caterina.hex b/bootloaders/caterina_LUFA/Caterina.hex index a06aa85..5da8582 100644 --- a/bootloaders/caterina_LUFA/Caterina.hex +++ b/bootloaders/caterina_LUFA/Caterina.hex @@ -1,6 +1,6 @@ :1070000055C000006EC000006CC000006AC00000E7 :1070100068C0000066C0000064C0000062C00000DC -:1070200060C000005EC00000B0C400005AC0000094 +:1070200060C000005EC00000BBC400005AC0000089 :1070300058C0000056C0000054C0000052C00000FC :1070400050C0000078C000004CC000004AC00000E2 :1070500048C0000046C0000044C0000042C000001C @@ -9,238 +9,240 @@ :1070800030C000002EC000002CC000002AC000004C :1070900028C0000026C0000024C0000022C000005C :1070A00020C000001EC000001CC0000011241FBE34 -:1070B000CFEFDAE0DEBFCDBF11E0A0E0B1E0EEEA55 +:1070B000CFEFDAE0DEBFCDBF11E0A0E0B1E0E4EC5D :1070C000FEE702C005900D92AE38B107D9F711E086 -:1070D000AEE8B1E001C01D92A43AB107E1F777D361 -:1070E000E4C68ECFF89410926F0010928100109237 +:1070D000AEE8B1E001C01D92A43AB107E1F78ED34A +:1070E000EFC68ECFF89410926F001092810010922C :1070F00085001092840081E085BF15BE47985D9A97 :10710000289A0C94000008952091980130919901DB :107110002F5F3F4F3093990120939801932F37FFB2 :1071200003C08EEF831B982F990F921710F4479886 :107130000895479A08951F920F920FB60F92112447 -:107140008F939F93109285001092840080918E01FE -:1071500090918F01009741F0019790938F01809358 -:107160008E01892B09F45D9A809190019091910193 -:10717000009741F001979093910180939001892BA2 -:1071800009F4289A8091920190919301019690932D -:107190009301809392019F918F910F900FBE0F905A -:1071A0001F90189584E08093E9000DC08091E8005D -:1071B0008B778093E80003C08EB3882351F08091D1 -:1071C000E80082FFF9CF8091E80085FFEFCF809142 -:1071D000F1000895982F83E08093E9008091E80002 -:1071E00085FD0DC08091E8008E778093E80003C094 -:1071F0008EB3882369F08091E80080FFF9CF9093E7 -:10720000F1005D9884E690E090938F0180938E0169 -:1072100008954F925F926F927F928F929F92AF925A -:10722000BF92CF92DF92EF92FF920F931F93CF9373 -:10723000DF9384E08093E9008091E80082FF4CC2F4 -:10724000289884E690E09093910180939001AADFC2 -:10725000182F853419F41092090103C0843519F4EC -:10726000A1DF8DE00FC28C34E1F38035D1F3843798 -:1072700021F484E4AFDF80E005C2813611F489E5B2 -:1072800001C28134B1F48EDF182F8CDF90E0880FBB -:10729000991FAA2797FDA095BA2F312F330F20E011 -:1072A000442737FD4095542F822B932BA42BB52BCD -:1072B000BAC1803711F483E5E5C1833549F4C0E0F4 -:1072C000D1E0899187DF21E0C730D207D1F7DBC158 -:1072D000863521F481E37EDF80E3D4C1833731F446 -:1072E00087E878DF85E976DF8EE1CCC18536B9F4B1 -:1072F000E0E0F0E093E085E090935700E89507B672 -:1073000000FCFDCF80935700E89507B600FCFDCF49 -:10731000E058FF4FA0E7E030FA0771F7A2CF8C36B4 -:1073200051F440DF809599E0E1E0F0E0082E909381 -:107330005700E89596CF823739F4E1E0F0E089E034 -:107340008093570084919EC1863439F4E0E0F0E0E8 -:1073500089E080935700849195C18E3439F4E3E03D -:10736000F0E089E08093570084918CC1813539F435 -:10737000E2E0F0E089E080935700849183C1823697 -:1073800031F489E527DF80E025DF80E87BC18234A6 -:1073900019F0873609F0DBC005DF082F03DFF82E70 -:1073A00001DF682E8554823008F06BC1902F80E099 -:1073B000CF2DD0E0C82BD92B173609F04BC081E177 -:1073C00080935700E895DD24CC24C3943FC0E0901F -:1073D0009401F09095010091960110919701B6E407 -:1073E0006B16D9F4ED2DF0E0EE29FF29E4918E2FF4 -:1073F000F1DEDD2081F082E090E0A0E0B0E0E80E78 -:10740000F91E0A1F1B1FE0929401F0929501009350 -:10741000960110939701DC2418C0D801C701B695D6 -:10742000A795979587952BD5D5DE82E090E0A0E0D3 -:10743000B0E0E80EF91E0A1F1B1FE0929401F092C3 -:10744000950100939601109397012197209709F0D9 -:10745000BECF19C18090940190909501A0909601A3 -:10746000B090970196E4691609F05DC083E0F401DD -:1074700080935700E89507B600FCFDCF54C0F6E4B2 -:107480006F1661F5772031F1E0909401F09095014D -:10749000009196011091970185DED82ECC24852D80 -:1074A00090E08C299D29F7010C0140925700E89546 -:1074B000112482E090E0A0E0B0E0E80EF91E0A1F7F -:1074C0001B1FE0929401F092950100939601109396 -:1074D000970102C067DE582E742423C0E090940107 -:1074E000F0909501009196011091970116950795DE -:1074F000F794E79457DE682FC701C9D480919401AF -:1075000090919501A0919601B09197010296A11DCD -:10751000B11D8093940190939501A0939601B0932F -:107520009701219704C0552477244424439420973D -:1075300009F0A5CF96E4691609F093CE85E0F40131 -:1075400080935700E89507B600FCFDCF8ACE8334C0 -:1075500071F4009194011091950124DE90E021E0F6 -:10756000F8010C0120935700E89511247ACE833658 -:1075700019F5E0909401F090950100919601109119 -:10758000970110DEF701E16090E021E00C0120930B -:107590005700E895112482E090E0A0E0B0E0E80E0A -:1075A000F91E0A1F1B1FE0929401F09295010093AF -:1075B00096011093970155CE8D3661F4E0919401B8 -:1075C000F091950185E080935700E89507B600FC9F -:1075D000FDCF47CE823551F4E0919401F0919501B1 -:1075E00005911491812FF6DD802F4CC0843421F554 -:1075F000E0909401F090950100919601109197010F -:1076000016950795F794E794CDDD682FC7013FD411 -:107610008091940190919501A0919601B09197016C -:107620000296A11DB11D8093940190939501A093A2 -:107630009601B093970115CE843609F5E090940138 -:10764000F09095010091960110919701D801C70122 -:10765000B695A7959795879512D4BCDD82E090E00A -:10766000A0E0B0E0E80EF91E0A1F1B1FE092940193 -:10767000F0929501009396011093970104C08B310D -:1076800011F08FE3A7DD83E08093E9009091E8009B -:107690008091E8008E778093E80095FF04C010C0C9 -:1076A0008EB38823C9F08091E80080FFF9CF8091E4 -:1076B000E8008E778093E80003C08EB3882361F0E2 -:1076C0008091E80080FFF9CF84E08093E900809109 -:1076D000E8008B778093E800DF91CF911F910F91A5 -:1076E000FF90EF90DF90CF90BF90AF909F908F90E2 -:1076F0007F906F905F904F90089590919C01892F9B -:107700008F77813249F580919D018032A1F08132DD -:1077100019F5913A09F58091E800877F8093E80098 -:107720008AE091E067E070E0E1D18091E8008B773A -:107730008093E8000895913279F48091E800877F82 -:107740008093E8008AE091E067E070E033D28091B6 -:10775000E8008E778093E800089582E061EC42E0D3 -:107760008BD083E061E842E187D084E060E842E1C9 -:1077700083C084B7877F84BF88E10FB6F894809375 -:107780006000109260000FBE20E880E090E00FB62D -:10779000F89420936100809361000FBE81E085BF63 -:1077A00092E095BF3F9A209A559AE1E6F0E0208357 -:1077B000108247985D9A289A109289008AEF8093E8 -:1077C000880090936F0083E080938100C6C0CF93C0 -:1077D000DF9388E10FB6F894809360001092600008 -:1077E0000FBEC7DF7894E0E0F0E0C591D49110C0FF -:1077F00010DD33D3809192019091930181589E4383 -:1078000030F08FEFCF3FD80711F0109209017CDCE8 -:1078100080910901882361F78091E0008160809365 -:10782000E00060DC80E090E0DF91CF910895FA0104 -:10783000923071F0933089F0913029F481E191E038 -:1078400022E130E015C080E090E020E030E010C0A0 -:1078500083E291E02EE330E00BC0882329F481E637 -:1078600091E024E030E004C085E691E026E230E0DB -:1078700091838083C90108958093E9008091EB0092 -:1078800081608093EB001092ED006093EC004093D8 -:10789000ED008091EE00881F8827881F0895809151 -:1078A0009C0188238CF403C08EB38823B1F08091AF -:1078B000E80082FFF9CF8091E8008B778093E800A1 -:1078C00008958EB3882349F08091E80080FFF9CFB6 -:1078D0008091E8008E778093E8000895EF92FF9200 -:1078E0000F931F9345D04CD008ED10E0F801808134 -:1078F0008F77808380818068808380818F7D808383 -:1079000019BC1EBA10929A0180EEE82EF12CF701F4 -:1079100080818B7F8083F80180818160808380E01B -:1079200060E042E0A9DFE1EEF0E080818E7F8083BD -:10793000E2EEF0E0808181608083808188608083D6 -:10794000F70180818E7F8083F80180818061808350 -:107950001F910F91FF90EF900895E7EDF0E0808187 -:10796000816080838AE482BF81E080939B01B6CFEF -:10797000E8EDF0E080818E7F80831092E200089530 -:107980001092DA001092E10008951F920F920FB644 -:107990000F9211242F933F934F935F936F937F9395 -:1079A0008F939F93AF93BF93EF93FF938091DA00F0 -:1079B00080FF1BC08091D80080FF17C08091DA0043 -:1079C0008E7F8093DA008091D90080FF0BC080E128 -:1079D00089BD82E189BD09B400FEFDCF81E08EBB87 -:1079E0003BD203C019BC1EBA37D28091E10080FFA0 -:1079F00017C08091E20080FF13C08091E2008E7F6B -:107A00008093E2008091E20080618093E2008091A7 -:107A1000D80080628093D80019BC85E08EBB1CD250 -:107A20008091E10084FF2CC08091E20084FF28C097 -:107A300080E189BD82E189BD09B400FEFDCF80915E -:107A4000D8008F7D8093D8008091E1008F7E809355 -:107A5000E1008091E2008F7E8093E2008091E2005D -:107A600081608093E20080919A01882331F48091B3 -:107A7000E30087FD02C081E001C084E08EBBECD151 -:107A80008091E10083FF21C08091E20083FF1DC04F -:107A90008091E100877F8093E10082E08EBB1092AD -:107AA0009A018091E1008E7F8093E1008091E20055 -:107AB0008E7F8093E2008091E20080618093E200FB -:107AC00080E060E042E0D8DEC7D1FF91EF91BF9146 -:107AD000AF919F918F917F916F915F914F913F9166 -:107AE0002F910F900FBE0F901F9018959C01409101 -:107AF000A2015091A3014617570718F4F90190E02D -:107B000044C06115710511F0AB01F8CF8091E80018 -:107B10008E778093E80040E050E0F0CF8EB388236A -:107B200009F444C0853009F443C08091E80083FF24 -:107B300002C081E008958091E80082FD31C080910B -:107B4000E80080FF22C08091F3009091F200782F2E -:107B500060E0292F30E0262B372B07C081918093DE -:107B6000F100415050402F5F3F4F4115510519F032 -:107B70002830310598F390E02830310509F491E080 -:107B80008091E8008E778093E8004115510531F629 -:107B9000992321F605C08EB3882341F0853041F04A -:107BA0008091E80082FFF7CF80E0089582E0089599 -:107BB00083E008959C016115710529F48091E80026 -:107BC0008B778093E800F90126C08EB3882391F16A -:107BD000853091F18091E80083FF02C081E0089533 -:107BE0008091E80082FFF1CF06C08091F10081937F -:107BF0006150704059F02091F3008091F200322FD3 -:107C000020E090E0822B932B892B79F78091E8007C -:107C10008B778093E80061157105B9F605C08EB3C6 -:107C2000882341F0853041F08091E80080FFF7CF54 -:107C300080E0089582E0089583E008950F931F93F4 -:107C4000DF93CF9300D0CDB7DEB7ECE9F1E08091C0 -:107C5000F100819381E0E43AF807C9F74EDD8091A5 -:107C6000E80083FFE4C080919C0190919D019530D4 -:107C700009F46DC0963040F4913081F1913070F08C -:107C8000933009F0D4C02AC0983009F4A3C09930C9 -:107C900009F4B2C0963009F0CAC07CC0803809F43B -:107CA000C6C0823809F0C3C08091A001877080935C -:107CB000E9008091EB001092E9002091E800277F15 -:107CC0002093E80090E025E0969587952A95E1F7C6 -:107CD00081708093F1001092F10087C0882319F021 -:107CE000823009F0A4C08F71823009F0A0C0809169 -:107CF0009E01882331F52091A001277009F497C0D7 -:107D00002093E9008091EB0080FF1BC0933021F4A9 -:107D10008091EB00806213C08091EB0080618093C2 -:107D2000EB0081E090E002C0880F991F2A95E2F7EE -:107D30008093EA001092EA008091EB0088608093C3 -:107D4000EB001092E9008091E800877F51C0882302 -:107D500009F06DC010919E011F770FB7F8948091C4 -:107D6000E800877F8093E8009ADD8091E80080FF3B -:107D7000FCCF8091E3008078812B8093E3008068C2 -:107D80008093E300112311F482E001C083E08EBBF5 -:107D90000FBF4DC08058823008F049C080919E01CD -:107DA00090919F016091A001AE014F5F5F4F3FDD59 -:107DB000BC01009709F43BC08091E800877F809365 -:107DC000E80089819A8192DE8091E8008B77809328 -:107DD000E8002DC0803859F58091E800877F8093B6 -:107DE000E80080919A018093F1008091E8008E77FD -:107DF0008093E80054DD1BC08823C9F490919E0154 -:107E00009230A8F48091E800877F8093E8009093F7 -:107E10009A0145DD80919A01882331F48091E30035 -:107E200087FD02C081E001C084E08EBB96DC8091BA -:107E3000E80083FF0AC08091EB0080628093EB0032 -:107E40008091E800877F8093E8000F900F90CF919A -:107E5000DF911F910F91089508951F938EB388238A -:107E600061F01091E9001092E9008091E80083FF31 -:107E700001C0E4DE17701093E9001F910895F9998D -:107E8000FECF92BD81BDF89A992780B50895262F1F -:107E9000F999FECF1FBA92BD81BD20BD0FB6F894EF -:0E7EA000FA9AF99A0FBE01960895F894FFCF52 -:107EAE004341544552494E4100010000000000007C -:107EBE00081201100102000008EB034A2001000025 -:107ECE0001000109023E0002010080320904000097 -:107EDE0001020201000524001001042402040524FD -:107EEE00060001070582030800FF09040100020ACB -:107EFE0000000007050402100001070583021000B0 -:107F0E0001040309042603410056005200200043D9 -:107F1E000044004300200042006F006F0074006CAC -:0E7F2E00006F0061006400650072000000003A +:107140002F938F939F93EF93FF931092850010924C +:10715000840080918E0190918F01009741F00197FA +:1071600090938F0180938E01892B09F45D9A809111 +:10717000900190919101009741F0019790939101B6 +:1071800080939001892B09F4289AE0E0F0E0859142 +:1071900094918F5F9F4F49F080919201909193015C +:1071A00001969093930180939201FF91EF919F91AB +:1071B0008F912F910F900FBE0F901F90189584E024 +:1071C0008093E9000DC08091E8008B778093E80000 +:1071D00003C08EB3882351F08091E80082FFF9CF7D +:1071E0008091E80085FFEFCF8091F1000895982FFE +:1071F00083E08093E9008091E80085FD0DC08091D7 +:10720000E8008E778093E80003C08EB3882369F08E +:107210008091E80080FFF9CF9093F1005D9884E6BB +:1072200090E090938F0180938E0108954F925F922A +:107230006F927F928F929F92AF92BF92CF92DF9286 +:10724000EF92FF920F931F93CF93DF9384E080938D +:10725000E9008091E80082FF56C2289884E690E019 +:107260009093910180939001AADF182F853419F42F +:107270001092090103C0843519F4A1DF8DE019C211 +:107280008C34E1F38035D1F3843721F484E4AFDF2B +:1072900080E00FC2813611F489E50BC28134B1F46C +:1072A0008EDF182F8CDF90E0880F991FAA2797FD9B +:1072B000A095BA2F312F330F20E0442737FD40959A +:1072C000542F822B932BA42BB52BC4C1803711F4E0 +:1072D00083E5EFC1833549F4C0E0D1E0899187DFD0 +:1072E00021E0C730D207D1F7E5C1863521F481E32B +:1072F0007EDF80E3DEC1833731F487E878DF85E91C +:1073000076DF8EE1D6C18536B9F4E0E0F0E093E0B7 +:1073100085E090935700E89507B600FCFDCF809379 +:107320005700E89507B600FCFDCFE058FF4FA0E7F7 +:10733000E030FA0771F7A2CF8C3651F440DF809528 +:1073400099E0E1E0F0E0082E90935700E89596CFA1 +:10735000823739F4E1E0F0E089E0809357008491CE +:10736000A8C1863439F4E0E0F0E089E0809357006A +:1073700084919FC18E3439F4E3E0F0E089E080939A +:107380005700849196C1813539F4E2E0F0E089E05C +:107390008093570084918DC1823631F489E527DFCF +:1073A00080E025DF80E885C1823419F0873609F056 +:1073B000E5C0109293011092920101DF082FFFDEC9 +:1073C000F82EFDDE682E8554823008F071C1902FB2 +:1073D00080E0CF2DD0E0C82BD92B10926F0017364C +:1073E00009F04BC081E180935700E895DD24CC245F +:1073F000C3943FC0E0909401F090950100919601F4 +:1074000010919701B6E46B16D9F4ED2DF0E0EE295A +:10741000FF29E4918E2FEBDEDD2081F082E090E009 +:10742000A0E0B0E0E80EF91E0A1F1B1FE0929401D5 +:10743000F09295010093960110939701DC2418C0F7 +:10744000D801C701B695A7959795879523D5CFDE27 +:1074500082E090E0A0E0B0E0E80EF91E0A1F1B1FDA +:10746000E0929401F0929501009396011093970198 +:107470002197209709F0BECF7DC080909401909015 +:107480009501A0909601B090970196E4691609F0D5 +:107490005DC083E0F40180935700E89507B600FCD7 +:1074A000FDCF54C0F6E46F1661F5772031F1E0901E +:1074B0009401F090950100919601109197017FDE63 +:1074C000D82ECC24852D90E08C299D29F7010C0124 +:1074D00040925700E895112482E090E0A0E0B0E0EF +:1074E000E80EF91E0A1F1B1FE0929401F09295010D +:1074F000009396011093970102C061DE582E742408 +:1075000023C0E0909401F0909501009196011091B4 +:10751000970116950795F794E79451DE682FC701F8 +:10752000C1D48091940190919501A0919601B09160 +:1075300097010296A11DB11D80939401909395012E +:10754000A0939601B0939701219704C05524772406 +:1075500044244394209709F0A5CF96E4691641F49A +:1075600085E0F40180935700E89507B600FCFDCF55 +:107570008DE03DDE82E080936F009CC0833471F427 +:1075800000919401109195011ADE90E021E0F8013C +:107590000C0120935700E895112470CE833619F51D +:1075A000E0909401F090950100919601109197015F +:1075B00006DEF701E16090E021E00C012093570026 +:1075C000E895112482E090E0A0E0B0E0E80EF91E1A +:1075D0000A1F1B1FE0929401F092950100939601FF +:1075E000109397014BCE8D3661F4E0919401F091A8 +:1075F000950185E080935700E89507B600FCFDCF24 +:107600003DCE823551F4E0919401F09195010591C0 +:107610001491812FECDD802F4CC0843421F5E09053 +:107620009401F090950100919601109197011695A3 +:107630000795F794E794C3DD682FC70133D4809191 +:10764000940190919501A0919601B09197010296B5 +:10765000A11DB11D8093940190939501A093960173 +:10766000B09397010BCE843609F5E0909401F09029 +:1076700095010091960110919701D801C701B69527 +:10768000A7959795879506D4B2DD82E090E0A0E0BB +:10769000B0E0E80EF91E0A1F1B1FE0929401F09261 +:1076A0009501009396011093970104C08B3111F05E +:1076B0008FE39DDD83E08093E9009091E800809165 +:1076C000E8008E778093E80095FF04C010C08EB369 +:1076D0008823C9F08091E80080FFF9CF8091E8000D +:1076E0008E778093E80003C08EB3882361F0809189 +:1076F000E80080FFF9CF84E08093E9008091E80002 +:107700008B778093E800DF91CF911F910F91FF90CD +:10771000EF90DF90CF90BF90AF909F908F907F9031 +:107720006F905F904F90089590919C01892F8F7773 +:10773000813249F580919D018032A1F0813219F5A5 +:10774000913A09F58091E800877F8093E8008AE00C +:1077500091E067E070E0D5D18091E8008B7780936D +:10776000E8000895913279F48091E800877F809352 +:10777000E8008AE091E067E070E027D28091E800BD +:107780008E778093E800089582E061EC42E07FD03C +:1077900083E061E842E17BD084E060E842E177C0C9 +:1077A00084B7877F84BF88E10FB6F8948093600028 +:1077B000109260000FBE20E880E090E00FB6F894D1 +:1077C00020936100809361000FBE81E085BF92E04D +:1077D00095BF3F9A209A559AE1E6F0E02083108207 +:1077E00047985D9A289A109289008AEF80938800C2 +:1077F00090936F0083E080938100BAC088E10FB658 +:10780000F89480936000109260000FBEC9DF7894F6 +:107810000CC00CDD2DD38091920190919301815881 +:107820009E4310F0109209016FDC809109018823BA +:1078300081F78091E00081608093E00053DC80E07C +:1078400090E00895FA01923071F0933089F0913010 +:1078500029F481E191E022E130E015C080E090E080 +:1078600020E030E010C083E291E02EE330E00BC076 +:10787000882329F481E691E024E030E004C085E625 +:1078800091E026E230E091838083C90108958093DE +:10789000E9008091EB0081608093EB001092ED0095 +:1078A0006093EC004093ED008091EE00881F8827E4 +:1078B000881F089580919C0188238CF403C08EB3A7 +:1078C0008823B1F08091E80082FFF9CF8091E80031 +:1078D0008B778093E80008958EB3882349F08091D8 +:1078E000E80080FFF9CF8091E8008E778093E80070 +:1078F0000895EF92FF920F931F9345D04CD008ED5F +:1079000010E0F80180818F77808380818068808398 +:1079100080818F7D808319BC1EBA10929A0180EEFF +:10792000E82EF12CF70180818B7F8083F801808124 +:107930008160808380E060E042E0A9DFE1EEF0E07A +:1079400080818E7F8083E2EEF0E0808181608083A1 +:10795000808188608083F70180818E7F8083F80139 +:107960008081806180831F910F91FF90EF90089537 +:10797000E7EDF0E08081816080838AE482BF81E06E +:1079800080939B01B6CFE8EDF0E080818E7F80830D +:107990001092E20008951092DA001092E10008952A +:1079A0001F920F920FB60F9211242F933F934F9374 +:1079B0005F936F937F938F939F93AF93BF93EF9357 +:1079C000FF938091DA0080FF1BC08091D80080FF78 +:1079D00017C08091DA008E7F8093DA008091D90001 +:1079E00080FF0BC080E189BD82E189BD09B400FE42 +:1079F000FDCF81E08EBB3BD203C019BC1EBA37D28B +:107A00008091E10080FF17C08091E20080FF13C0E9 +:107A10008091E2008E7F8093E2008091E20080619D +:107A20008093E2008091D80080628093D80019BCD6 +:107A300085E08EBB1CD28091E10084FF2CC0809138 +:107A4000E20084FF28C080E189BD82E189BD09B4DC +:107A500000FEFDCF8091D8008F7D8093D80080916B +:107A6000E1008F7E8093E1008091E2008F7E809321 +:107A7000E2008091E20081608093E20080919A01AF +:107A8000882331F48091E30087FD02C081E001C0CA +:107A900084E08EBBECD18091E10083FF21C0809116 +:107AA000E20083FF1DC08091E100877F8093E100A9 +:107AB00082E08EBB10929A018091E1008E7F8093CC +:107AC000E1008091E2008E7F8093E2008091E200ED +:107AD00080618093E20080E060E042E0D8DEC7D1C0 +:107AE000FF91EF91BF91AF919F918F917F916F9196 +:107AF0005F914F913F912F910F900FBE0F901F906C +:107B000018959C014091A2015091A3014617570777 +:107B100018F4F90190E044C06115710511F0AB0152 +:107B2000F8CF8091E8008E778093E80040E050E045 +:107B3000F0CF8EB3882309F444C0853009F443C0E4 +:107B40008091E80083FF02C081E008958091E80001 +:107B500082FD31C08091E80080FF22C08091F30057 +:107B60009091F200782F60E0292F30E0262B372B00 +:107B700007C081918093F100415050402F5F3F4FEB +:107B80004115510519F02830310598F390E028305F +:107B9000310509F491E08091E8008E778093E80048 +:107BA0004115510531F6992321F605C08EB388237E +:107BB00041F0853041F08091E80082FFF7CF80E00E +:107BC000089582E0089583E008959C016115710590 +:107BD00029F48091E8008B778093E800F90126C0B2 +:107BE0008EB3882391F1853091F18091E80083FF75 +:107BF00002C081E008958091E80082FFF1CF06C0C5 +:107C00008091F10081936150704059F02091F30010 +:107C10008091F200322F20E090E0822B932B892B71 +:107C200079F78091E8008B778093E8006115710502 +:107C3000B9F605C08EB3882341F0853041F08091BC +:107C4000E80080FFF7CF80E0089582E0089583E0A8 +:107C500008950F931F93DF93CF9300D0CDB7DEB776 +:107C6000ECE9F1E08091F100819381E0E43AF807DA +:107C7000C9F75ADD8091E80083FFE4C080919C0140 +:107C800090919D01953009F46DC0963040F491308B +:107C900081F1913070F0933009F0D4C02AC098304F +:107CA00009F4A3C0993009F4B2C0963009F0CAC0F3 +:107CB0007CC0803809F4C6C0823809F0C3C0809106 +:107CC000A00187708093E9008091EB001092E90099 +:107CD0002091E800277F2093E80090E025E096952A +:107CE00087952A95E1F781708093F1001092F10059 +:107CF00087C0882319F0823009F0A4C08F718230C8 +:107D000009F0A0C080919E01882331F52091A00147 +:107D1000277009F497C02093E9008091EB0080FF61 +:107D20001BC0933021F48091EB00806213C08091DE +:107D3000EB0080618093EB0081E090E002C0880F4F +:107D4000991F2A95E2F78093EA001092EA00809149 +:107D5000EB0088608093EB001092E9008091E800CE +:107D6000877F51C0882309F06DC010919E011F7755 +:107D70000FB7F8948091E800877F8093E8009ADD40 +:107D80008091E80080FFFCCF8091E3008078812B18 +:107D90008093E30080688093E300112311F482E074 +:107DA00001C083E08EBB0FBF4DC08058823008F009 +:107DB00049C080919E0190919F016091A001AE0108 +:107DC0004F5F5F4F3FDDBC01009709F43BC08091DE +:107DD000E800877F8093E80089819A8192DE809114 +:107DE000E8008B778093E8002DC0803859F58091AA +:107DF000E800877F8093E80080919A018093F100EA +:107E00008091E8008E778093E80054DD1BC08823C2 +:107E1000C9F490919E019230A8F48091E800877F88 +:107E20008093E80090939A0145DD80919A01882320 +:107E300031F48091E30087FD02C081E001C084E05D +:107E40008EBBA2DC8091E80083FF0AC08091EB002A +:107E500080628093EB008091E800877F8093E80048 +:107E60000F900F90CF91DF911F910F91089508957A +:107E70001F938EB3882361F01091E9001092E900FE +:107E80008091E80083FF01C0E4DE17701093E900E1 +:107E90001F910895F999FECF92BD81BDF89A992757 +:107EA00080B50895262FF999FECF1FBA92BD81BDE6 +:107EB00020BD0FB6F894FA9AF99A0FBE019608956C +:047EC000F894FFCF64 +:107EC4004341544552494E41000100000000000066 +:107ED400081201100102000008EB034A200100000F +:107EE40001000109023E0002010080320904000081 +:107EF40001020201000524001001042402040524E7 +:107F0400060001070582030800FF09040100020AB4 +:107F14000000000705040210000107058302100099 +:107F240001040309042603410056005200200043C3 +:107F34000044004300200042006F006F0074006C96 +:0E7F4400006F00610064006500720000000024 :040000030000700089 :00000001FF -- cgit v1.2.3-18-g5258