diff --git a/firmware/Makefile b/firmware/Makefile index 17b31e7..b84d9f0 100755 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -8,7 +8,7 @@ # This Revision: $Id: Makefile 692 2008-11-07 15:07:40Z cs $ DEVICE = atmega8 -F_CPU = 12000000 # in Hz +F_CPU = 16000000 # in Hz FUSE_L = 0x9f FUSE_H = 0xc9 AVRDUDE = avrdude -c avrisp2 -P usb -p $(DEVICE) # edit this line for your programmer diff --git a/firmware/main.c b/firmware/main.c index 3095fea..f597ae3 100755 --- a/firmware/main.c +++ b/firmware/main.c @@ -28,6 +28,9 @@ publish any hardware using these IDs! This is for demonstration only! #include /* required by usbdrv.h */ #include "usbdrv.h" +//ololol +#include + /* Keyboard usage values, see usb.org's HID-usage-tables document, chapter * 10 Keyboard/Keypad Page for more codes. */ @@ -207,6 +210,7 @@ static void SendKeys(void) char Character = SendBufferRead(); if (!Character) { + usbSetInterrupt((void *)&reportBuffer, sizeof(reportBuffer)); g_ShouldKeyUp = 0; return; } @@ -240,7 +244,6 @@ static void SendKeys(void) else { g_ShouldKeyUp = 0; - return; } usbSetInterrupt((void *)&reportBuffer, sizeof(reportBuffer)); @@ -267,12 +270,100 @@ usbMsgLen_t usbFunctionSetup(uchar data[8]) return 0; /* default for not implemented requests: return no data back to host */ } +#define DET_CLOSED(a) (a > 300 ? 1 : 0) +#define DET_OPEN(a) (a < 250 ? 1 : 0) + +void PrintNumber(uint32_t Number) +{ + char Buffer[9]; + snprintf(Buffer, 9, "%03i", Number); + lcd_puts(Buffer); +} + +void PrintTime(uint32_t Delta) +{ + uint8_t Miliseconds = Delta % 1000; + Delta /= 1000; + uint8_t Seconds = Delta % 60; + Delta /= 60; + uint8_t Minutes = Delta % 60; + + char Buffer[4]; + snprintf(Buffer, 3, "%01i", Minutes); + lcd_puts(Buffer); + + lcd_puts(":"); + + snprintf(Buffer, 3, "%02i", Seconds); + lcd_puts(Buffer); + + lcd_puts(":"); + + snprintf(Buffer, 4, "%03i", Miliseconds); + lcd_puts(Buffer); +} + +#define clockCyclesToMicroseconds(a) ( ((a) * 1000L) / (F_CPU / 1000L) ) +#define MICROSECONDS_PER_TIMER0_OVERFLOW (clockCyclesToMicroseconds(64 * 256)) +#define MILLIS_INC (MICROSECONDS_PER_TIMER0_OVERFLOW / 1000) +#define FRACT_INC ((MICROSECONDS_PER_TIMER0_OVERFLOW % 1000) >> 3) +#define FRACT_MAX (1000 >> 3) + +volatile unsigned long timer0_overflow_count = 0; +volatile unsigned long timer0_millis = 0; +static unsigned char timer0_fract = 0; + +SIGNAL(TIMER0_OVF_vect) +{ + unsigned long m = timer0_millis; + unsigned char f = timer0_fract; + + m += MILLIS_INC; + f += FRACT_INC; + if (f >= FRACT_MAX) { + f -= FRACT_MAX; + m += 1; + } + + timer0_fract = f; + timer0_millis = m; + timer0_overflow_count++; +} + +unsigned long millis() +{ + unsigned long m; + uint8_t oldSREG = SREG; + cli(); + m = timer0_millis; + SREG = oldSREG; + + return m; +} + +void beepdabeeper(void) +{ + PORTD |= (1 << 1); + _delay_ms(200); + PORTD &= ~(1 << 1); +} int main(void) { uint16_t i; wdt_disable(); - SendString("this is some pretty awesome stuff"); + DDRD |= (1 << 1); + beepdabeeper(); + _delay_ms(500); + beepdabeeper(); + //PORTD |= (1 << 1); + sei(); + sbi(TCCR0, CS01); + sbi(TCCR0, CS00); + sbi(TIMSK, TOIE0); + + ADMUX=(1< wait <-"); + + uint32_t StartTime = 0; + for (;;) + { + ADCSRA|=(1< pomiar <-"); //lcd_puts_p(PSTR("Test")); + uint32_t EndTime = StartTime; + PORTD |= (1 << 1); + uint8_t ShouldTurnOff = 1; + for (;;) + { + if (ShouldTurnOff && millis() - StartTime > 200) + { + ShouldTurnOff = 0; + PORTD &= ~(1 << 1); + } + //_delay_ms(200); + //lcd_clrscr(); + lcd_gotoxy(4, 0); + PrintTime(millis() - StartTime); + + // start ADC sample... + ADCSRA|=(1< wynik: <-"); + lcd_gotoxy(4, 1); + PrintTime(EndTime - StartTime); + for (;;) {} + + /*for (;;) {} wdt_enable(WDTO_1S); usbInit(); - usbDeviceDisconnect(); /* enforce re-enumeration, do this while interrupts are disabled! */ + usbDeviceDisconnect(); i = 0b11111111111; - while(--i){ /* fake USB disconnect for > 250 ms */ + while(--i){ wdt_reset(); _delay_ms(1); } usbDeviceConnect(); sei(); - for(;;){ /* main event loop */ + for(;;){ wdt_reset(); usbPoll(); if(usbInterruptIsReady()){ - /* called after every poll of the interrupt endpoint */ SendKeys(); } - } + }*/ return 0; } diff --git a/firmware/main.elf b/firmware/main.elf index 6bbf42b..1fd217d 100755 Binary files a/firmware/main.elf and b/firmware/main.elf differ diff --git a/firmware/main.hex b/firmware/main.hex index d612a41..e93d532 100644 --- a/firmware/main.hex +++ b/firmware/main.hex @@ -1,5 +1,5 @@ :100000005EC0C5C177C076C075C074C073C072C011 -:1000100071C070C06FC06EC06DC06CC06BC06AC074 +:1000100071C044C36FC06EC06DC06CC06BC06AC09D :1000200069C068C067C0040309041203710033008B :100030006B002E006F007200670021000E0353005A :1000400074006F0070006500720012011001000062 @@ -11,164 +11,324 @@ :1000A00019012905910295017503910395067508BB :1000B000150025650507190029658100C000112478 :1000C0001FBECFE5D4E0DEBFCDBF10E0A0E6B0E0BC -:1000D000E4E9FAE002C005900D92A838B107D9F71B -:1000E00010E0A8E8B0E001C01D92A93EB107E1F719 -:1000F000EED2CEC485CF85B7826085BF8BB78064D2 -:100100008BBF8BE480939F008AE580939E000895C7 -:100110001F93CF93DF939091AF00935097FDA1C0B1 -:100120002091AC008091AB008D3209F098C09830DE -:1001300009F095C0CCE0D0E0C21BD109CD54DF4F0F -:1001400083EC809393008AE580936000109288008E -:100150008881807621F0CE0197D2282F77C09A81AE -:1001600010929C008981882321F410929D0022E046 -:1001700067C0853019F49093B00061C0863009F0F3 +:1000D000E6E8F4E102C005900D92AC39B107D9F71A +:1000E00011E0ACE9B0E001C01D92A630B107E1F724 +:1000F00015D4C7C985CF85B7826085BF8BB78064AB +:100100008BBF8BE48093BC008AE58093BB0008958D +:100110001F93CF93DF939091CC00935097FDA1C094 +:100120002091C9008091C8008D3209F098C09830A4 +:1001300009F095C0CCE0D0E0C21BD109C053DF4F1D +:1001400083EC8093B0008AE58093600010929C005D +:100150008881807621F0CE017ED2282F77C09A81C7 +:100160001092B9008981882321F41092BA0022E00C +:1001700067C0853019F49093CD0061C0863009F0D6 :100180004AC08B81813019F48AE490E01BC0823030 -:1001900041F48CE590E09093AE008093AD0022E2B4 +:1001900041F48CE590E09093CB008093CA0022E27A :1001A00036C08330F9F48A81882341F486E290E0F6 -:1001B0009093AE008093AD0024E029C0813041F4DB -:1001C0008AE290E09093AE008093AD0022E11FC0E0 -:1001D0008230E1F48CE390E09093AE008093AD0028 -:1001E0002EE015C0813241F48EE690E09093AE008F -:1001F0008093AD0029E00BC0823241F48EE790E09D -:100200009093AE008093AD002FE301C020E080E426 -:10021000809388001BC0883021F421E082EB90E0BD -:1002200011C0893019F49093B20009C08A3011F4DA -:1002300021E006C08B3019F48BE480939F0020E00E -:100240008CE990E09093AE008093AD008F8188237D +:1001B0009093CB008093CA0024E029C0813041F4A1 +:1001C0008AE290E09093CB008093CA0022E11FC0A6 +:1001D0008230E1F48CE390E09093CB008093CA00EE +:1001E0002EE015C0813241F48EE690E09093CB0072 +:1001F0008093CA0029E00BC0823241F48EE790E080 +:100200009093CB008093CA002FE301C020E080E4EC +:1002100080939C001BC0883021F421E08FEC90E09B +:1002200011C0893019F49093CF0009C08A3011F4BD +:1002300021E006C08B3019F48BE48093BC0020E0F1 +:1002400089EB90E09093CB008093CA008F81882344 :1002500021F48E81821708F4282F209361001092D8 -:10026000AF008091600084FF49C0809161008F3FA2 +:10026000CC008091600084FF49C0809161008F3F85 :1002700009F444C0182F893008F018E0811B8093DE -:1002800061008091930098E889278093930011235F -:1002900041F12091AD003091AE008091880086FF41 -:1002A0000DC0A4E9B0E080E090E0F901E80FF91F8B +:1002800061008091B00098E889278093B000112325 +:1002900041F12091CA003091CB0080919C0086FFF3 +:1002A0000DC0A1EBB0E080E090E0F901E80FF91F8C :1002B000E491ED9301961817C1F708C0912FD90169 -:1002C000E4E9F0E08D9181939150E1F71150812F95 -:1002D00090E01F5F0196820F931F9093AE00809372 -:1002E000AD0084E990E0612F4ED0612F6C5F6C30DF +:1002C000E1EBF0E08D9181939150E1F71150812F96 +:1002D00090E01F5F0196820F931F9093CB00809355 +:1002E000CA0081EB90E0612F4ED0612F6C5F6C30C3 :1002F00019F08FEF809361006093600094E180B308 -:10030000847131F49150D9F71092B0001092AA0084 +:10030000847131F49150D9F71092CD001092C7004A :10031000DF91CF911F9108951F93DC01162F8091DB -:100320009E0084FF07C080919F0098E889278093F2 -:100330009F0003C08AE580939E00912FE0EAF0E0E1 -:100340008D91819391501916DCF380EA90E0612F32 -:100350001AD01C5F10939E001F910895A82FB92FEB +:10032000BB0084FF07C08091BC0098E889278093B8 +:10033000BC0003C08AE58093BB00912FEDEBF0E099 +:100340008D91819391501916DCF38DEB90E0612F24 +:100350001AD01C5F1093BB001F910895A82FB92FCE :1003600080E090E041E050EA609530E009C02D91D6 :1003700082279795879510F084279527305EC8F3DC :100380006F5FA8F30895EADF8D939D930895CF934F -:10039000CFB7CF93C395849BE9F7849B09C0849B17 -:1003A00007C0849B05C0849B03C0849B01C0A3C07D -:1003B000DF93C091AC00DD27CD54DF4F849B02C09A -:1003C000DF91EBCF2F930F931F9300B32FEF04FB1D -:1003D00020F94F933F9310B34FEF012704FB21F90E -:1003E0003BE031C04E7F012F10B3216028C0102F99 -:1003F0004D7F2260000000B329C04B7F2460012F95 -:10040000000010B32BC010B3477F28602AC04F7E76 -:1004100000B320612CC04F7D10B320622FC04F7BF2 -:1004200000B3206432C0422700B349934FEF00006D -:10043000102714FB20F910B31471C9F1297F91F230 -:10044000012704FB21F900B3237F89F2315058F1D1 -:10045000102714FB22F910B3277E79F2012704FB41 -:1004600023F92F7C81F200B3102714FB24F92F7994 -:1004700071F200C010B3012704FB25F92F7359F264 -:1004800000C000B3102714FB26F9223040F200C050 -:1004900010B3012704FB27F9243028F64F77206892 -:1004A00010B30000F9CF10E41ABF002719C03B5069 -:1004B0003195C31BD04010E41ABF0881033CF9F00A -:1004C0000B34E9F02091AA001981110F1213EDCF1E -:1004D0004A81441F093641F10D3211F0013E29F7DE -:1004E0000093B1003F914F911F910F912F91DF9198 -:1004F000CAB7C6FD4FCFCF91CFBFCF9118952091EE -:10050000B100222379F31091AF00112369F5343043 -:100510006AF13093AF002093AB001091AC003BE048 -:10052000311B3093AC0022C00091AF000130E4F4E5 -:100530000AE54F7049F43091600034FD19C0009312 -:100540006000C3E9D0E018C030919E0034FD10C0B7 -:1005500000939E00CFE9D0E00FC02795A8F451503A -:10056000A9F4220F0000F9CF4AE503C042ED01C013 -:10057000432FC4E1D0E032E011B31461949A11BB6F -:1005800002B320E414E15F93012756E002BB2795F4 -:1005900020F4515021F4220FF9CF012756E000003A -:1005A0003B5A02BBD0F2279528F4515029F4220F70 -:1005B0000000F9CF012756E0279502BB20F45150E7 -:1005C00021F4220FF9CF012756E02991332302BBF2 -:1005D00021F60B7E1091B000110FC651D04002BB26 -:1005E00011F01093AA0010E41ABF006111B31B7E32 -:1005F000402F4B7E5F9100C000C002BB11BB42BBCD -:1006000071CFE0918400F091850080838091840017 -:100610009091850001969093850080938400895C79 -:100620009040809734F089EC90E09093850080931F -:1006300084000895E0918600F09187008091840005 -:10064000909185008E179F0711F420E00FC0219133 -:10065000F0938700E0938600E95CF040B09734F0B7 -:1006600089EC90E09093870080938600822F089514 -:10067000CF93DF93EC0102C02196C3DF88818823EA -:10068000D9F7DF91CF910895FC0180818076803287 -:10069000E1F48181813041F48AE890E09093AE00EA -:1006A0008093AD0088E00895823041F482E990E0C3 -:1006B0009093AE008093AD0081E008958A3029F4D4 -:1006C00083818093920080E0089580E00895EF9206 -:1006D000FF920F931F9388E10FB6F89481BD11BC70 -:1006E0000FBE82E690E0C4DF8CE0BFD12EE088E14F -:1006F00090E00FB6F894A89581BD0FBE21BDFBDC3C -:100700008C9A8FEF97E007C0A895EDEEF2E0319755 -:10071000F1F700C000000197B9F78C987894EE24A7 -:10072000E39487E3F82E0CE217E2A895F1DC8091C0 -:100730009E0084FFFACF10928A0010928B001092D4 -:100740008C0010928D0010928E0010928F001092EB -:1007500090001092910080918900882329F08AE806 -:1007600090E068E0D9DD28C0E092890063DF982F2F -:10077000882311F181568A3110F49D5505C0892FC7 -:1007800081548A3120F49D5390938C0018C0892F96 -:100790008153893010F49351F7CF903319F41093AB -:1007A0008C000DC0903219F400938C0008C09E326A -:1007B00019F4F0928C0003C010928900B6CF8AE839 -:1007C00090E068E0A9DDB1CF282F662311F0969A5A -:1007D00001C09698959887B38F6087BB98B3907F38 -:1007E000822F82958F70892B88BB979A00C097982B -:1007F0002F70292B28BB979A00C097989F6098BBB1 -:100800000895882311F0969A01C09698959A87B317 -:10081000807F87BB979A00C096B3979800C0979A3D -:1008200000C086B38F709295907F9798892B08951A -:1008300080E0E7DF87FDFCCF86E090E00197F1F7ED -:1008400080E0DFDF08951F93182FF2DF812F60E033 -:10085000BBDF1F9108951F93182FEADF812F61E0FE -:10086000B3DF1F910895662311F4805801C08054AE -:10087000EADF0895DDDF90E0089581E0E4DF089588 -:1008800082E0E1DF08951F93182FD2DF1A3041F480 -:10089000803410F080E001C080E48058D4DF03C0D1 -:1008A000812F61E091DF1F9108950F931F93CF93E4 -:1008B000DF938C01EB016115710511F00BC0E3DFD3 -:1008C000F80181918F018823D1F709C0F801819146 -:1008D0008F01D9DF2197FFEFCF3FDF07B9F7DF9116 -:1008E000CF911F910F910895AF92BF92DF92EF9237 -:1008F000FF920F931F93CF93DF935B017C01C0E0C6 -:10090000D0E029C0F7012081822F6AE0B5D0D92E2E -:10091000822FB2D0B1D0092F822F64E6ADD0182F2C -:10092000882311F0805DAFDF002319F0802F805DF8 -:1009300003C0112311F080E3A6DFDD2019F08D2D17 -:10094000805D01C080E39FDF80E29DDF219682E031 -:1009500090E0E80EF91ECA15DB05A0F2DF91CF91F9 -:100960001F910F91FF90EF90DF90BF90AF9008958F -:10097000CF93DF93EC0101C086DFFE0121968491C5 -:100980008823D1F7DF91CF910895CF92DF92FF9224 -:100990000F931F93CF93DF93082F6B01EA0148DF7A -:1009A000F82E10E00770107083E0000F111F8A9579 -:1009B000E1F7802F806447DF00E005C0EC0DFD1DEE -:1009C000849149DF0F5FE02FF0E0EC17FD07B4F3EF -:1009D00003C080E040DF0F5F0830D8F38F2D829591 -:1009E0008F709FE0F9226F2D3EDFDF91CF911F9135 -:1009F0000F91FF90DF90CF900895CF92DF92FF92FA -:100A00000F931F93CF93DF93082F6B01EA0110DF41 -:100A1000F82E10E00770107093E0000F111F9A95E8 -:100A2000E1F7802F80640FDF00E005C0EC0DFD1DB5 -:100A3000808111DF0F5FE02FF0E0EC17FD07B4F3CA -:100A400003C080E008DF0F5F0830D8F38F2D829558 -:100A50008F709FE0F9226F2D06DFDF91CF911F91FC -:100A60000F91FF90DF90CF90089587B38F6087BB81 -:100A70008E9A8D9A8F9A0895991B79E004C0991FD8 -:100A8000961708F0961B881F7A95C9F780950895E8 -:040A9000F894FFCF08 -:100A94005AFF7468697320697320736F6D652070E1 -:100AA400726574747920617765736F6D65207374F2 -:080AB40075666600C900C90067 +:10039000CFB7CF93DF93C395849BE9F7849B0BC0C2 +:1003A000849B09C0849B07C0849B05C0849B03C0B9 +:1003B000849B01C08BC06F93C091C900DD27C053DF +:1003C000DF4F2F9365E5849B03C02F916F91E6CF9C +:1003D0000F931F934F9320E040E15F9300B30471AC +:1003E00004FB27F93F9350E03BE039C014714064AF +:1003F0002F77012F5F5F1EC0406810B314712F77F5 +:1004000052501FC0406400B32F770471D1F15F5F79 +:1004100000C023C0406210B32F77147191F15F5F69 +:1004200000C025C004711027515012F45D5F000018 +:10043000115027952C3F10B3C8F6147101270150B5 +:1004400027952C3FC8F64227499300B30471102723 +:100450004F73115027952C3FA8F64695469510B33B +:10046000147179F00127015027952C3F98F66B5AAB +:1004700060F3315000B3B0F600C010E41ABF00279B +:1004800019C03B503195C31BD04010E41ABF0881FE +:10049000033C09F10B34F9F02091C7001981110FC9 +:1004A0001213EDCF4A81441F093651F10D3211F07C +:1004B000013E29F70093CE003F915F914F911F912C +:1004C0000F912F916F91CAB7C6FD65CFDF91CF9184 +:1004D000CFBFCF9118952091CE00222369F31091C0 +:1004E000CC00112391F5343092F13093CC0020935D +:1004F000C8001091C9003BE0311B3093C90027C0F0 +:100500000091CC0001300CF50AE54F7049F43091B0 +:10051000600034FD1DC000936000C0EBD0E01CC043 +:100520003091BB0034FD14C00093BB00CCEBD0E095 +:1005300013C0052710E000C0000002BB1AC0052749 +:1005400010E0221F1DC010E021C04AE502C032EDBC +:10055000432FC4E1D0E032E011B31461949A02B3A6 +:1005600011BB54E120E865E320FF052702BB279576 +:1005700017951C3FF0F66695B8F7B1F720FF0527F1 +:1005800002BB279517951C3FD0F62795179517FFA7 +:10059000052700001C3F02BBB0F629913A9519F7D8 +:1005A0000B7E1091CD00110FC651D04002BB11F04F +:1005B0001093C70010E41ABF006111B31B7E402FD7 +:1005C0004B7E54E05A95F1F702BB11BB42BB74CF8E +:1005D000E0919800F091990080838091980090912B +:1005E000990001969093990080939800865E9040C0 +:1005F000809734F086EE90E0909399008093980075 +:100600000895E0919A00F0919B008091980090915C +:1006100099008E179F0711F420E00FC02191F093ED +:100620009B00E0939A00E65EF040B09734F086EECF +:1006300090E090939B0080939A00822F0895CF932F +:10064000DF93EC0102C02196C3DF88818823D9F7AC +:10065000DF91CF910895FC01808180768032E1F4B2 +:100660008181813041F487EA90E09093CB008093C0 +:10067000CA0088E00895823041F48FEA90E09093B8 +:10068000CB008093CA0081E008958A3029F48381E9 +:100690008093AF0080E0089580E008951F920F924C +:1006A0000FB60F9211242F933F938F939F93AF9385 +:1006B000BF938091A2009091A300A091A400B0915B +:1006C000A5003091A6000196A11DB11D232F2D5F1D +:1006D0002D3720F02D570196A11DB11D2093A600A6 +:1006E0008093A2009093A300A093A400B093A500D0 +:1006F00080919E0090919F00A091A000B091A100D8 +:100700000196A11DB11D80939E0090939F00A09320 +:10071000A000B093A100BF91AF919F918F913F91A5 +:100720002F910F900FBE0F901F9018958FB7F894D0 +:100730002091A2003091A3004091A4005091A50007 +:100740008FBFB901CA010895919A8FEF90E7A2E097 +:1007500081509040A040E1F700C0000091980895BA +:100760002F923F924F925F926F927F928F929F92C1 +:10077000AF92BF92CF92DF92EF92FF920F931F93AF +:10078000DF93CF9300D000D0CDB7DEB73B014C0153 +:1007900028EE33E040E050E07FD3522E432E342E3B +:1007A000252E8DB79EB708970FB6F8949EBF0FBE43 +:1007B0008DBF0DB71EB70F5F1F4F7E010894E11C60 +:1007C000F11CEDB7FEB7F282E18293E0A92EB12CC5 +:1007D000F801B382A28282E690E095838483622F3F +:1007E000732F842F952F2CE330E040E050E054D35A +:1007F000CA01B9012CE330E040E050E04DD3F801EC +:10080000668317826BD38DB79EB708960FB6F894A0 +:100810009EBF0FBE8DBFC70160E070E01CD287E6AF +:10082000C82E80E0D82EC60160E070E014D2EDB78B +:10083000FEB738970FB6F894FEBF0FBEEDBF0DB7E9 +:100840001EB70F5F1F4FF282E182F801B382A282CE +:1008500089E690E095838483652D742D832D922DF8 +:100860002CE330E040E050E017D3F80166831782B4 +:1008700035D38DB79EB708960FB6F8949EBF0FBEBE +:100880008DBFC70160E070E0E6D1C60160E070E0B6 +:10089000E2D1EDB7FEB738970FB6F894FEBF0FBEA2 +:1008A000EDBF0DB71EB70F5F1F4FF282E18284E0EC +:1008B00090E0F801938382838EE690E095838483B1 +:1008C000C401B30128EE33E040E050E0E5D2F80186 +:1008D0006683178203D38DB79EB708960FB6F89438 +:1008E0009EBF0FBE8DBFC70160E070E0B4D10F9016 +:1008F0000F900F900F90CF91DF911F910F91FF906C +:10090000EF90DF90CF90BF90AF909F908F907F90AF +:100910006F905F904F903F902F900895AF92BF924D +:10092000CF92DF92EF92FF920F931F9388E10FB661 +:10093000F89481BD11BC0FBE899A919A8FEF90E710 +:10094000A2E081509040A040E1F700C000009198E3 +:100950008FE79AE1A6E081509040A040E1F700C007 +:100960000000919A8FEF90E7A2E081509040A04064 +:10097000E1F700C000009198789483B7826083BF4C +:1009800083B7816083BF89B7816089BF80EC87B9F5 +:1009900085E886B98CE03FD288E22BD144D183E050 +:1009A00060E037D183E790E060E070E054D1369AA0 +:1009B000349BFECF349A84B195B18D529140B8F3F7 +:1009C0008FB7F894A090A200B090A300C090A400AC +:1009D000D090A5008FBF27D182E061E01AD18EE7C9 +:1009E00090E060E070E037D1919A11E01123C1F0FE +:1009F0002FB7F8948091A2009091A300A091A40039 +:100A0000B091A5002FBF8A199B09AC09BD09893C8B +:100A10009105A105B10510F411E002C0919810E014 +:100A200084E060E0F6D02FB7F8946091A200709156 +:100A3000A3008091A4009091A5002FBF6A197B09A3 +:100A40008C099D098DDE369A349BFECF349A84B191 +:100A500095B18A3F910550F68FB7F894E090A200C7 +:100A6000F090A3000091A4001091A5008FBF919A6F +:100A70008FEF90E7A2E081509040A040E1F700C0E6 +:100A800000009198D0D082E060E0C3D08BE890E085 +:100A900060E070E0E0D084E061E0BBD0EA18FB08E1 +:100AA0000C091D09C801B7015BDEFFCF0F931F932F +:100AB000DF93CF93CDB7DEB729970FB6F894DEBF9B +:100AC0000FBECDBF2DB73EB72A5030400FB6F894B9 +:100AD0003EBF0FBE2DBFEDB7FEB731968E010F5F43 +:100AE0001F4FADB7BEB712961C930E93119729E016 +:100AF00030E0338322832EE630E03583248366831F +:100B0000778380879187EAD12DB73EB7265F3F4F25 +:100B10000FB6F8943EBF0FBE2DBFC80160E070E075 +:100B20009AD029960FB6F894DEBF0FBECDBFCF91F5 +:100B3000DF911F910F910895662311F0969A01C0DD +:100B400096989398B89AB99ABA9A8D9A9598C298A5 +:100B5000C198C09887FD959A86FDC29A85FDC19A75 +:100B600084FDC09A979A00C097989598C298C198AA +:100B7000C09883FD959A82FDC29A81FDC19A80FD3D +:100B8000C09A979A00C09798C09AC19AC29A959AAB +:100B90000895882311F0969A01C09698939AB89870 +:100BA000B998BA988D98979A00C0B09B02C080E11E +:100BB00001C080E0B1998062B299806485998068B3 +:100BC000979800C0979A00C0B0998160B1998260EF +:100BD000B2998460859988609798089580E0D9DFFC +:100BE00087FDFCCF88E090E00197F1F780E0D1DF4E +:100BF00008951F93182FF2DF812F60E09DDF1F9172 +:100C000008951F93182FEADF812F61E095DF1F9170 +:100C10000895662311F4805801C08054EADF0895D6 +:100C2000DDDF90E0089581E0E4DF089582E0E1DF18 +:100C300008951F93182FD2DF1A3041F4803410F03A +:100C400080E001C080E48058D4DF03C0812F61E0E0 +:100C500073DF1F9108950F931F93CF93DF938C0140 +:100C6000EB016115710511F00BC0E3DFF801819113 +:100C70008F018823D1F709C0F80181918F01D9DF55 +:100C80002197FFEFCF3FDF07B9F7DF91CF911F919A +:100C90000F910895AF92BF92DF92EF92FF920F9360 +:100CA0001F93CF93DF935B017C01C0E0D0E029C0AC +:100CB000F7012081822F6AE0E3D0D92E822FE0D085 +:100CC000DFD0092F822F64E6DBD0182F882311F0A4 +:100CD000805DAFDF002319F0802F805D03C01123FA +:100CE00011F080E3A6DFDD2019F08D2D805D01C0BD +:100CF00080E39FDF80E29DDF219682E090E0E80EB6 +:100D0000F91ECA15DB05A0F2DF91CF911F910F915B +:100D1000FF90EF90DF90BF90AF900895CF93DF9357 +:100D2000EC0101C086DFFE01219684918823D1F772 +:100D3000DF91CF910895CF92DF92FF920F931F938F +:100D4000CF93DF93082F6B01EA0148DFF82E10E004 +:100D50000770107083E0000F111F8A95E1F7802F54 +:100D6000806447DF00E005C0EC0DFD1D849149DF84 +:100D70000F5FE02FF0E0EC17FD07B4F303C080E055 +:100D800040DF0F5F0830D8F38F2D82958F709FE082 +:100D9000F9226F2D3EDFDF91CF911F910F91FF90D0 +:100DA000DF90CF900895CF92DF92FF920F931F9321 +:100DB000CF93DF93082F6B01EA0110DFF82E10E0CC +:100DC0000770107093E0000F111F9A95E1F7802FC4 +:100DD00080640FDF00E005C0EC0DFD1D808111DF98 +:100DE0000F5FE02FF0E0EC17FD07B4F303C080E0E5 +:100DF00008DF0F5F0830D8F38F2D82958F709FE04A +:100E0000F9226F2D06DFDF91CF911F910F91FF9097 +:100E1000DF90CF9008951F93182F8E9A8B9A8F9AF8 +:100E2000B89AB99ABA9A8D9A80E09AEF0197F1F739 +:100E3000C19AC09A979A00C0979880E09EE4019763 +:100E4000F1F7979A00C0979880E091E0FC01319704 +:100E5000F1F7979A00C09798FC013197F1F7C09885 +:100E6000979A00C097980197F1F788E2C2DE88E070 +:100E7000C0DED9DE86E0BDDE812FBBDE1F91089586 +:100E8000991B79E004C0991F961708F0961B881FDC +:100E90007A95C9F780950895A1E21A2EAA1BBB1B6B +:100EA000FD010DC0AA1FBB1FEE1FFF1FA217B30736 +:100EB000E407F50720F0A21BB30BE40BF50B661F4C +:100EC000771F881F991F1A9469F760957095809510 +:100ED00090959B01AC01BD01CF010895AEE0B0E05B +:100EE000E3E7F7E0A5C20D891E898F89988D97FFEA +:100EF00002C080E090E801979E838D831A83098366 +:100F000086E08C839E01255E3F4FCE010196698D60 +:100F10007A8DA90111D04D815E8157FD0AC02F81C4 +:100F20003885421753070CF49A01020F131FF8017A +:100F300010822E96E4E098C2ABE0B0E0E1EAF7E080 +:100F400069C23C012B015A01FC0117821682838180 +:100F500081FD03C06FEF7FEFB9C19AE0892E1E01BA +:100F60000894211C311CF3012381F20123FD85919A +:100F700023FF81912F01882309F4A5C1853239F41B +:100F800023FD859123FF81912F01853221F490E08B +:100F9000B301B6D1E8CF982FFF24EE249924FFE1C6 +:100FA000FF15D0F09B3269F09C3228F4903259F052 +:100FB000933291F40EC09D3249F0903369F441E0D0 +:100FC00024C052E0F52A84E0F82A28C098E0F92AE3 +:100FD00025C0E0E1FE2A22C0F7FC29C0892F8053FA +:100FE0008A3070F4F6FE05C0989C902C1124980E5F +:100FF00015C0E89CE02C1124E80EF0E2FF2A0EC098 +:101000009E3229F4F6FC5FC140E4F42A07C09C3606 +:1010100019F450E8F52A02C0983649F4F20123FD8C +:10102000959123FF91912F01992309F0B8CF892F32 +:101030008554833018F08052833038F444E050E017 +:10104000A40EB51E5FE359830FC0933631F093377A +:1010500079F0933509F052C01FC0F5018081898372 +:1010600042E050E0A40EB51E610101E010E011C0A5 +:10107000F501C080D180F6FC03C06FEF7FEF02C0A6 +:10108000692D70E042E050E0A40EB51EC6012DD1DE +:101090008C015FE7F52213C0F501C080D180F6FC1A +:1010A00003C06FEF7FEF02C0692D70E042E050E0B7 +:1010B000A40EB51EC6010ED18C0150E8F52AF3FE30 +:1010C00006C018C080E290E0B3011AD1EA948E2DD8 +:1010D00090E008171907B0F30DC0F601F7FC8591F1 +:1010E000F7FE81916F0190E0B3010AD1E110EA941B +:1010F000015010400115110581F7E2C0943611F03E +:10110000993661F5F7FE08C0F501208131814281F1 +:10111000538184E090E00AC0F501808191819C01B7 +:10112000442737FD4095542F82E090E0A80EB91E69 +:101130009FE6F92257FF09C05095409530952195BB +:101140003F4F4F4F5F4FE0E8FE2ACA01B901A101AE +:101150002AE030E001D1D82ED2183FC0953729F4CB +:101160001F2D1F7E2AE030E01DC01F2D197F9F36E6 +:1011700061F0903720F4983509F0A5C00FC0903782 +:1011800039F0983709F09FC004C028E030E00AC069 +:10119000106114FD146020E130E004C014FD1660FD +:1011A00020E132E017FF08C0F50160817181828182 +:1011B000938144E050E008C0F50180819181BC0139 +:1011C00080E090E042E050E0A40EB51EA101C4D042 +:1011D000D82ED2188FE7F82EF122F6FE0BC05EEF64 +:1011E000F522D91438F4F4FE07C0F2FC05C08FEEE6 +:1011F000F82202C01D2D01C0192DF4FE0DC0FE0104 +:10120000ED0DF11D8081803319F499EEF92208C0AB +:101210001F5FF2FE05C003C08F2D867809F01F5FA7 +:101220000F2DF3FC13C0F0FE0EC01E1510F09D2C08 +:101230000AC09D2C9E0C911A1E2D05C080E290E0E4 +:10124000B3015ED01F5F1E15C8F304C01E1510F455 +:10125000E11A01C0EE2404FF0EC080E390E0B30168 +:101260004FD002FF1BC001FD03C088E790E00EC015 +:1012700088E590E00BC0802F867881F001FF02C0E6 +:101280008BE201C080E2F7FC8DE290E0B30138D040 +:1012900005C080E390E0B30133D09A94D914C8F329 +:1012A000DA94F101ED0DF11D808190E0B30128D0B9 +:1012B000DD20B1F705C080E290E0B30121D0EA94CF +:1012C000EE20C9F750CEF30166817781CB012B96D2 +:1012D000E2E1BCC0FC010590615070400110D8F7FC +:1012E000809590958E0F9F1F0895FC01615070406E +:1012F00001900110D8F7809590958E0F9F1F08954B +:101300000F931F93CF93DF938C01EB018B8181FFB0 +:101310001BC082FF0DC02E813F818C819D812817CB +:10132000390764F4E881F9810193F983E88306C001 +:10133000E885F985802F0995892B31F48E819F816D +:1013400001969F838E8302C00FEF1FEFC801DF91CC +:10135000CF911F910F910895FA01AA27283051F1DA +:10136000203181F1E8946F936E7F6E5F7F4F8F4FD6 +:101370009F4FAF4FB1E03ED0B4E03CD0670F781F35 +:10138000891F9A1FA11D680F791F8A1F911DA11D1A +:101390006A0F711D811D911DA11D20D009F4689453 +:1013A0003F912AE0269F11243019305D3193DEF6FB +:1013B000CF010895462F4770405D4193B3E00FD0B1 +:1013C000C9F7F6CF462F4F70405D4A3318F0495D9C +:1013D00031FD4052419302D0A9F7EACFB4E0A6957F +:1013E0009795879577956795BA95C9F700976105A1 +:1013F000710508959B01AC010A2E069457954795F7 +:1014000037952795BA95C9F7620F731F841F951FEB +:10141000A01D08952F923F924F925F926F927F92FC +:101420008F929F92AF92BF92CF92DF92EF92FF92F4 +:101430000F931F93CF93DF93CDB7DEB7CA1BDB0BA0 +:101440000FB6F894DEBF0FBECDBF09942A88398845 +:1014500048885F846E847D848C849B84AA84B9844C +:10146000C884DF80EE80FD800C811B81AA81B98158 +:10147000CE0FD11D0FB6F894DEBF0FBECDBFED016C +:061480000895F894FFCF6F +:101486005AFF25303169003A00253032690025308F +:101496003369002D3E2077616974203C2D002D3E76 +:1014A60020706F6D696172203C2D002D3E2077798A +:0C14B6006E696B3A203C2D00E600E60059 :00000001FF