From fc3dac7a6dfe5870b244263a0dbd18d18013c6a7 Mon Sep 17 00:00:00 2001 From: Donald Delmar Davis Date: Sun, 29 Sep 2013 18:50:32 -0700 Subject: initial rework --- MinSysex.h | 2 +- README.md | 17 +- USBMidiTransport.c | 159 +++++++++++++++++ USBMidiTransport.h | 88 +++++++++ USB_MIDI.c | 155 ---------------- USB_MIDI.h | 79 --------- USB_MIDI.hex | 511 ++++++++++++++++++++++++++--------------------------- makefile | 4 +- 8 files changed, 510 insertions(+), 505 deletions(-) create mode 100755 USBMidiTransport.c create mode 100755 USBMidiTransport.h delete mode 100755 USB_MIDI.c delete mode 100755 USB_MIDI.h diff --git a/MinSysex.h b/MinSysex.h index a7b31b7..5716b5a 100644 --- a/MinSysex.h +++ b/MinSysex.h @@ -10,7 +10,7 @@ #include "MidiSpecs.h" -#include "USB_MIDI.h" +#include "USBMidiTransport.h" //#include "LGL.h" #define ARDUINO_MMA_VENDOR_1 0x7D diff --git a/README.md b/README.md index aa63508..23ec0b2 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ The idea here is to create a lufa based midi framework for use on the stock usb 5. YOUR LIBRARY HERE…. -2. To create a minimal framework for identifying resetting and loadib3. code onto midi devices. +2. To create a minimal framework for identifying resetting and loading code onto midi devices. ###Breakdown @@ -37,23 +37,16 @@ Because of this the two streams are split out between packets and sysex data. So void GetSysex ([interface]) void SendSysex (uint8_t *messege, [interface]) -The remaining details should be as hidden and interchangable [^1] as possible. +The remaining details should be as hidden and interchangable as possible. ###MinSysex -A minimal sysex handler, called by either the maintainence tasks or by MidiEventAvailable(), should handle at a minim +A minimal sysex handler, called by either the maintainence tasks or by MidiEventAvailable(), should handle at a minimum the universal sysex id request and response and a (mma) vender specific sysex to jump to a bootloader. This should be expanded to identify the capabilities, architecture, and code loader method, and perhaps a subset of common midi settings (channel,mode etc.) Eventually this sysex subset will form a protocall called "Let's Get Loaded (LGL)" +This handler should also buffer sysex's that are not directed at the target. -um the universal sysex id request and response and a (mma) vender specific sysex to jump to a bootloader. This should be expanded to identify the capabilities, architecture, and code loader method, and perhaps a subset of common midi settings (channel,mode etc.) Eventually this sysex subset form a protocall called "Let's Get Loaded (LGL)" - -This handler should also buffer sysex's that are not directed at the target or that l with functions which can be overwritten. - -### Hardware Abstractions. +###Hardware Abstractions. Some of the work involved with the LUFA library is to provide feedback for the states of the the usb connection itself. This requires a hardware abstraction for each board supported by the library. In our use case this would better be served by providing weak functions to be overridden user functions. -[^1]: because you cant parse it doesnt mean you need to magle it thank your for letting me test you Mau… You are this close to total fail. - - - diff --git a/USBMidiTransport.c b/USBMidiTransport.c new file mode 100755 index 0000000..307571e --- /dev/null +++ b/USBMidiTransport.c @@ -0,0 +1,159 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2013. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2013 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaims all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Main source file for the MIDI demo. This file contains the main tasks of + * the demo and is responsible for the initial application hardware configuration. + */ + +#include "USBMidiTransport.h" + +/** LUFA MIDI Class driver interface configuration and state information. This structure is + * passed to all MIDI Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. + */ +USB_ClassInfo_MIDI_Device_t USB_MIDI_Interface = + { + .Config = + { + .StreamingInterfaceNumber = 1, + .DataINEndpoint = + { + .Address = MIDI_STREAM_IN_EPADDR, + .Size = MIDI_STREAM_EPSIZE, + .Banks = 1, + }, + .DataOUTEndpoint = + { + .Address = MIDI_STREAM_OUT_EPADDR, + .Size = MIDI_STREAM_EPSIZE, + .Banks = 1, + }, + }, + }; + +/** Main program entry point. This routine contains the overall program flow, including initial + * setup of all components and the main program loop. + */ + + +void InitializeUSBMidi() +{ + SetupHardware(); + MIDI_EVENT_PACKET_t e; +// LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); + GlobalInterruptEnable(); + +} + +/* + not very efficient. This should put all incoming packets into a que. + */ +volatile MIDI_EVENT_PACKET_t currentPacket; + +MIDI_EVENT_PACKET_t GetUSBMidiEvent (void) { return currentPacket; } +//void SendUSBMidiEvent (MIDI_EVENT_PACKET_t); +//bool USBSysexAvaliable (void); +//uint8_t * GetUSBSysex (void); +//void SendUSBSysex (uint8_t *messege); + + +bool USBMidiEventAvailable (void) +{ + + if (MIDI_Device_ReceiveEventPacket(&USB_MIDI_Interface, (MIDI_EventPacket_t *)(¤tPacket))) + { + if (CIN_IS_SYSEX(currentPacket.cin)) { + minSysexHandler(currentPacket); + } + } + + MIDI_Device_USBTask(&USB_MIDI_Interface); + USB_USBTask(); +} + + +/** Configures the board hardware and chip peripherals for the demo's functionality. */ +void SetupHardware(void) +{ +#if (ARCH == ARCH_AVR8) + /* Disable watchdog if enabled by bootloader/fuses */ + MCUSR &= ~(1 << WDRF); + wdt_disable(); + + /* Disable clock division */ + clock_prescale_set(clock_div_1); +#elif (ARCH == ARCH_XMEGA) + /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ + XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); + XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); + + /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ + XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); + XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); + + PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; +#endif + + /* Hardware Initialization */ +// LEDs_Init(); + USB_Init(); +} + + +/** Event handler for the library USB Connection event. */ +void EVENT_USB_Device_Connect(void) +{// +// LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); +} + +/** Event handler for the library USB Disconnection event. */ +void EVENT_USB_Device_Disconnect(void) +{ +// LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); +} + +/** Event handler for the library USB Configuration Changed event. */ +void EVENT_USB_Device_ConfigurationChanged(void) +{ + bool ConfigSuccess = true; + + ConfigSuccess &= MIDI_Device_ConfigureEndpoints(&USB_MIDI_Interface); + +// LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); +} + +/** Event handler for the library USB Control Request reception event. */ +void EVENT_USB_Device_ControlRequest(void) +{ + MIDI_Device_ProcessControlRequest(&USB_MIDI_Interface); +} + diff --git a/USBMidiTransport.h b/USBMidiTransport.h new file mode 100755 index 0000000..bcf73d0 --- /dev/null +++ b/USBMidiTransport.h @@ -0,0 +1,88 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2013. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2013 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaims all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Header file for MIDI.c. + */ + +#ifndef _AUDIO_OUTPUT_H_ +#define _AUDIO_OUTPUT_H_ + + /* Includes: */ + #include + #include + #include + #include + #include + #include + + #include "Descriptors.h" + #include "MidiSpecs.h" + #include "MinSysex.h" + + +// #include + #include + #include + + /* Macros: */ + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ + #define LEDMASK_USB_NOTREADY LEDS_LED1 + + /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */ + #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3) + + /** LED mask for the library LED driver, to indicate that the USB interface is ready. */ + #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4) + + /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */ + #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3) + + /* Function Prototypes: */ + void SetupHardware(void); + + void EVENT_USB_Device_Connect(void); + void EVENT_USB_Device_Disconnect(void); + void EVENT_USB_Device_ConfigurationChanged(void); + void EVENT_USB_Device_ControlRequest(void); + + void InitializeUSBMidi(void); + bool USBMidiEventAvailable (void); + MIDI_EVENT_PACKET_t GetUSBMidiEvent (void); + void SendUSBMidiEvent (MIDI_EVENT_PACKET_t); + bool USBSysexAvaliable (void); + uint8_t * GetUSBSysex (void); + void SendUSBSysex (uint8_t *messege); + + + +#endif + diff --git a/USB_MIDI.c b/USB_MIDI.c deleted file mode 100755 index 15b2d6e..0000000 --- a/USB_MIDI.c +++ /dev/null @@ -1,155 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2013. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -/* - Copyright 2013 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, distribute, and sell this - software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in - all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaims all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -/** \file - * - * Main source file for the MIDI demo. This file contains the main tasks of - * the demo and is responsible for the initial application hardware configuration. - */ - -#include "USB_MIDI.h" - -/** LUFA MIDI Class driver interface configuration and state information. This structure is - * passed to all MIDI Class driver functions, so that multiple instances of the same class - * within a device can be differentiated from one another. - */ -USB_ClassInfo_MIDI_Device_t USB_MIDI_Interface = - { - .Config = - { - .StreamingInterfaceNumber = 1, - .DataINEndpoint = - { - .Address = MIDI_STREAM_IN_EPADDR, - .Size = MIDI_STREAM_EPSIZE, - .Banks = 1, - }, - .DataOUTEndpoint = - { - .Address = MIDI_STREAM_OUT_EPADDR, - .Size = MIDI_STREAM_EPSIZE, - .Banks = 1, - }, - }, - }; - -volatile uint8_t myMidiChannel=DEFAULT_MIDI_CHANNEL; -volatile uint8_t myMidiDevice=DEFAULT_MIDI_DEVICE; -volatile uint8_t myMidiCable=DEFAULT_MIDI_CABLE; -volatile uint8_t myMidiID[]={ARDUINO_MMA_VENDOR_1 ,ARDUINO_MMA_VENDOR_2,ARDUINO_MMA_VENDOR_3}; -volatile uint8_t mySysexBuffer[MAX_SYSEX_SIZE]; -volatile uint8_t mySysexBufferIndex; - -/** Main program entry point. This routine contains the overall program flow, including initial - * setup of all components and the main program loop. - */ - - -int main(void) -{ - SetupHardware(); - MIDI_EVENT_PACKET_t e; -// LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); - GlobalInterruptEnable(); - - for (;;) - { - - while (MIDI_Device_ReceiveEventPacket(&USB_MIDI_Interface, (MIDI_EventPacket_t *)(&e))) - { - if (CIN_IS_SYSEX(e.cin)) { - minSysexHandler(e); - - } - - } - - MIDI_Device_USBTask(&USB_MIDI_Interface); - USB_USBTask(); - } -} - - -/** Configures the board hardware and chip peripherals for the demo's functionality. */ -void SetupHardware(void) -{ -#if (ARCH == ARCH_AVR8) - /* Disable watchdog if enabled by bootloader/fuses */ - MCUSR &= ~(1 << WDRF); - wdt_disable(); - - /* Disable clock division */ - clock_prescale_set(clock_div_1); -#elif (ARCH == ARCH_XMEGA) - /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ - XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); - XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); - - /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ - XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); - XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); - - PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; -#endif - - /* Hardware Initialization */ -// LEDs_Init(); - USB_Init(); -} - - -/** Event handler for the library USB Connection event. */ -void EVENT_USB_Device_Connect(void) -{// -// LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); -} - -/** Event handler for the library USB Disconnection event. */ -void EVENT_USB_Device_Disconnect(void) -{ -// LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); -} - -/** Event handler for the library USB Configuration Changed event. */ -void EVENT_USB_Device_ConfigurationChanged(void) -{ - bool ConfigSuccess = true; - - ConfigSuccess &= MIDI_Device_ConfigureEndpoints(&USB_MIDI_Interface); - -// LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); -} - -/** Event handler for the library USB Control Request reception event. */ -void EVENT_USB_Device_ControlRequest(void) -{ - MIDI_Device_ProcessControlRequest(&USB_MIDI_Interface); -} - diff --git a/USB_MIDI.h b/USB_MIDI.h deleted file mode 100755 index 1b00106..0000000 --- a/USB_MIDI.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2013. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -/* - Copyright 2013 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, distribute, and sell this - software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in - all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaims all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -/** \file - * - * Header file for MIDI.c. - */ - -#ifndef _AUDIO_OUTPUT_H_ -#define _AUDIO_OUTPUT_H_ - - /* Includes: */ - #include - #include - #include - #include - #include - #include - - #include "Descriptors.h" - #include "MidiSpecs.h" - #include "MinSysex.h" - - -// #include - #include - #include - - /* Macros: */ - /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ - #define LEDMASK_USB_NOTREADY LEDS_LED1 - - /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */ - #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3) - - /** LED mask for the library LED driver, to indicate that the USB interface is ready. */ - #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4) - - /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */ - #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3) - - /* Function Prototypes: */ - void SetupHardware(void); - void CheckJoystickMovement(void); - - void EVENT_USB_Device_Connect(void); - void EVENT_USB_Device_Disconnect(void); - void EVENT_USB_Device_ConfigurationChanged(void); - void EVENT_USB_Device_ControlRequest(void); - -#endif - diff --git a/USB_MIDI.hex b/USB_MIDI.hex index 35664aa..d0846c5 100644 --- a/USB_MIDI.hex +++ b/USB_MIDI.hex @@ -1,6 +1,6 @@ :10000000BEC00000D7C00000D5C00000D3C00000B3 :10001000D1C00000CFC00000CDC00000CBC00000A8 -:10002000C9C00000C7C00000C3C50000C3C00000B5 +:10002000C9C00000C7C00000BEC50000C3C00000BA :10003000C1C00000BFC00000BDC00000BBC00000C8 :10004000B9C00000B7C00000B5C00000B3C00000D8 :10005000B1C00000AFC00000ADC00000ABC00000E8 @@ -23,259 +23,258 @@ :100160000065006F006E0061007200640020004CAA :10017000006F00610064006500640000000011244D :100180001FBECFEFDAE0DEBFCDBF11E0A0E0B1E0EF -:10019000E2E4F1E102C005900D92AA32B107D9F76D -:1001A00011E0AAE2B1E001C01D92AB3CB107E1F75A -:1001B0001ED0C5C725CF08950895089580E091E029 -:1001C000A8C784B7877F84BF88E10FB6F89480936F -:1001D0006000109260000FBE80E090E020E80FB653 -:1001E000F89420936100809361000FBEC4C40F9304 -:1001F0001F93DF93CF9300D000D0CDB7DEB7E1DF00 -:1002000078948E010F5F1F4F0FC089818F70282F48 -:1002100030E0C901877F892B39F022FF05C0698151 -:100220007A818B819C81D8D080E091E0B80104D79D -:10023000882359F780E091E03DD7E9D6F5CFDA0180 -:10024000923049F0933061F09130F9F4ECEAF0E04B -:1002500022E130E01EC0EEEBF0E025E630E019C010 -:10026000813049F0813018F0823079F408C0E3E23F -:10027000F1E0849107C0E7E2F1E0849103C0E9E492 -:10028000F1E08491282F30E004C0E0E0F0E020E0CD -:1002900030E0ED93FC93C901089511D4F89488E8F7 -:1002A00093E120E931E0F9013197F1F70197D9F7AE -:1002B00087E797E790930108809300082CE088E196 -:1002C00090E00FB6F894A895809360000FBE20933D -:1002D0006000FFCFCF93DF938091B0018E3731F074 -:1002E0008F3709F476C08D37F9F419C08091B301C6 -:1002F000863009F06EC08091B401813009F069C088 -:10030000C1E1D1E080E091E0BE01E4D6249681E035 -:10031000C932D807B9F780E091E0AED65AC08091D3 -:10032000B5018E3109F4B9DF10922C0120E047C0ED -:1003300080912C01E82FF0E0ED01CC0FDD1FCC0FF8 -:10034000DD1FC255DE4F9981E35DFE4F90838F5FC5 -:1003500080932C0188818F70853081F188818F7026 -:100360008F3061F180912C01E82FF0E0AA0FBB1FC4 -:10037000AA0FBB1FA055BE4F9C91E35DFE4F90831B -:100380008F5F80932C0188818F708630B9F08881CF -:100390008F708C3099F088818F708D3079F08881E2 -:1003A0008F70823059F080912C01E82FF0E09B8112 -:1003B000E35DFE4F90838F5F80932C012F5FA22F10 -:1003C000B0E080912A0190912B01A817B9070CF495 -:1003D000AFCFDF91CF910895CF93DF939B01AC0115 -:1003E000A62FAF706A2F70E0CB01877F892B09F4AD -:1003F0002AC1A2FF28C18091AD01823051F48091C1 -:100400002A0190912B01813891051CF083E08093A3 -:10041000AD016430710549F0643071050CF413C10D -:10042000683071050CF00FC1DCC08091AD018130E6 -:10043000E9F1813030F0823021F1833009F003C1DD -:10044000A8C010922B0110922A01303F09F0FBC086 -:10045000842F8E57823040F480910C01581751F14F -:100460005F3709F0F0C026C080910E01481709F0EF -:10047000EAC080910F01851709F0E5C081E0809303 -:10048000AD0180912A0190912B01FC01EE0FFF1F1D -:10049000EE0FFF1FE255FE4F2083318342835383CB -:1004A000019690932B0180932A01CDC08091100179 -:1004B000831711F482E0E3CF83E08093AD01809154 -:1004C0002A0190912B01FC01EE0FFF1FEE0FFF1F81 -:1004D000E255FE4F208331834283538301969093EC -:1004E0002B0180932A0110922C0120E047C08091BB -:1004F0002C01E82FF0E0ED01CC0FDD1FCC0FDD1F4C -:10050000C255DE4F9981E35DFE4F90838F5F8093EC -:100510002C0188818F70853081F188818F708F30B8 -:1005200061F180912C01E82FF0E0AA0FBB1FAA0F08 -:10053000BB1FA055BE4F9C91E35DFE4F90838F5F24 -:1005400080932C0188818F708630B9F088818F70FC -:100550008C3099F088818F708D3079F088818F7020 -:10056000823059F080912C01E82FF0E09B81E35D0F -:10057000FE4F90838F5F80932C012F5FA22FB0E0FE -:1005800080912A0190912B01A817B9070CF4AFCFE5 -:100590005AC080912C0190E08D3791051CF4109287 -:1005A0002C014FC080912C01E82FF0E0E35DFE4F5D -:1005B00030838F5F80932C0180912C01E82FF0E035 -:1005C000E35DFE4F40838F5F80932C0180912C016F -:1005D000E82FF0E0E35DFE4F50838F5F80932C01A6 -:1005E00032C080912A0190912B01FC01EE0FFF1F78 -:1005F000EE0FFF1FE255FE4F20833183428353836A -:10060000019690932B0180932A018091AD01823055 -:1006100011F460DE16C080912C01E82FF0E0E35D5C -:10062000FE4F30838F5F80932C01A53051F0809175 -:100630002C01E82FF0E0E35DFE4F40838F5F809355 -:100640002C011092AD01DF91CF9108959C01409152 -:10065000C9015091CA014617570718F4F90190E0F3 -:1006600045C06115710511F0AB01F8CF8091E8002C -:100670008E778093E80040E050E0F0CF8091C20197 -:10068000882309F445C0853009F444C08091E8000E -:1006900083FF02C081E008958091E80082FD32C0AE -:1006A0008091E80080FF22C08091F3009091F200D9 -:1006B000782F60E0292F30E0262B372B07C081915F -:1006C0008093F100415050402F5F3F4F411551053D -:1006D00019F02830310598F390E02830310509F4FD -:1006E00091E08091E8008E778093E80041155105F4 -:1006F00029F6992319F606C08091C201882341F09A -:10070000853041F08091E80082FFF6CF80E00895C7 -:1007100082E0089583E008959C014091C9015091C1 -:10072000CA014617570718F4F90190E046C0611551 -:10073000710511F0AB01F8CF8091E8008E778093BE -:10074000E80040E050E0F0CF8091C201882309F436 -:1007500047C0853009F446C08091E80083FF02C09D -:1007600081E008958091E80082FD34C08091E80026 -:1007700080FF23C08091F3009091F200782F60E019 -:10078000292F30E0262B372B08C084918093F1006D -:100790003196415050402F5F3F4F4115510519F0A0 -:1007A0002830310590F390E02830310509F491E0CC -:1007B0008091E8008E778093E8004115510521F67D -:1007C000992309F0C1CF06C08091C201882341F06E -:1007D000853041F08091E80082FFF6CF80E00895F7 -:1007E00082E0089583E00895BF92CF92DF92EF9266 -:1007F000FF920F931F93CF93DF93182F092F7B0145 -:100800006A012BD1B82E8823B1F5812F902F9C013E -:10081000E901C114D10439F0F60180819181E81A0F -:10082000F90AC80FD91F00E010E022C08091E8004B -:1008300085FD16C08091E8008B778093E800E7D3B0 -:10084000C114D10449F0F60180819181800F911F7C -:100850009183808385E010C000D1882349F00CC0CB -:100860008091F10089930894E108F1080F5F1F4F10 -:10087000E114F104D9F68B2DDF91CF911F910F91E7 -:10088000FF90EF90DF90CF90BF900895BF92CF92EE -:10089000DF92EF92FF920F931F93CF93DF93182F66 -:1008A000092F7B016A01D9D0B82E8823B1F5812F99 -:1008B000902F9C01E901C114D10439F0F601808127 -:1008C0009181E81AF90AC80FD91F00E010E022C090 -:1008D0008091E80085FD16C08091E8008E778093B6 -:1008E000E80095D3C114D10449F0F60180819181CB -:1008F000800F911F9183808385E010C0AED0882344 -:1009000049F00CC089918093F1000894E108F10846 -:100910000F5F1F4FE114F104D9F68B2DDF91CF91BA -:100920001F910F91FF90EF90DF90CF90BF900895AF -:10093000382F282F2EC0822F8F708093E900231725 -:1009400021F4762F942F50E006C07091EC00909126 -:10095000ED005091F00091FF1BC08091EB008E7F65 -:100960008093EB008091ED008D7F8093ED0080916E -:10097000EB0081608093EB007093EC009093ED00AE -:100980005093F0008091EE0087FD02C080E0089552 -:100990002F5F273080F23F703093E90081E00895A7 -:1009A0000F931F93CF93DF93062FEC0110E02AC023 -:1009B0009881992329F16B81E981FA812C81892F12 -:1009C0008F70873018F5223010F452E001C056E0E5 -:1009D00040E028E030E003C04F5F220F331F2E17A6 -:1009E0003F07D0F36295660F660F607C991F9927C9 -:1009F000991F692B4295407F452B9ADF882331F060 -:100A00001F5F25961017A0F281E001C080E0DF9102 -:100A1000CF911F910F9108958091C30188239CF479 -:100A200004C08091C2018823B9F08091E80082FF60 -:100A3000F8CF8091E8008B778093E800089580914B -:100A4000C201882349F08091E80080FFF8CF8091AF -:100A5000E8008E778093E80008954091E40050917B -:100A6000E50024E68091EC0080FF24C08091E8003E -:100A700080FD1EC08091C201882311F482E0089598 -:100A8000853011F483E008958091EB0085FF02C06A -:100A900081E008958091E4009091E5008417950726 -:100AA00009F3222311F484E008952150AC01DACF38 -:100AB00080E008958091E80082FFDCCFF9CF6BD011 -:100AC00072D0E0EEF0E0808181608083A8EDB0E03C -:100AD0008C918F778C9319BCE7EDF0E080818E7F4D -:100AE00080838C918F7E8C931092C1010895EF9238 -:100AF000FF920F931F934FD056D008ED10E0F801EE -:100B000080818F77808380818068808380818F7DE2 -:100B1000808319BC1092C2011092BE011092C001D4 -:100B20001092BF0180EEE82EF12CF70180818B7FBF -:100B30008083F80180818160808380E060E042E012 -:100B4000F7DEE1EEF0E080818E7F8083E2EEF0E080 -:100B5000808181608083808188608083F7018081CB -:100B60008E7F8083F8018081806180831F910F9147 -:100B7000FF90EF900895E8EDF0E080818F7E808314 -:100B8000E7EDF0E080818160808384E082BF81E0D6 -:100B90008093C101ACCFE8EDF0E080818E7F80834F -:100BA0001092E20008951092DA001092E100089588 -:100BB0001F920F920FB60F9211242F933F934F93D2 -:100BC0005F936F937F938F939F93AF93BF93EF93B5 -:100BD000FF938091E10082FF0AC08091E20082FFD2 -:100BE00006C08091E1008B7F8093E1000FD280915D -:100BF000DA0080FF1DC08091D80080FF19C080916D -:100C0000DA008E7F8093DA008091D90080FF0CC0DB -:100C100080E189BD82E189BD09B400FEFDCF81E09C -:100C20008093C201C8DA04C019BC1092C201C4DAB0 -:100C30008091E10080FF18C08091E20080FF14C025 -:100C40008091E2008E7F8093E2008091E2008061DB -:100C50008093E2008091D80080628093D80019BC14 -:100C600085E08093C201D2D18091E10084FF2FC042 -:100C70008091E20084FF2BC080E189BD82E189BDC3 -:100C800009B400FEFDCF8091D8008F7D8093D800FD -:100C90008091E1008F7E8093E1008091E2008F7E61 -:100CA0008093E2008091E20081608093E200809175 -:100CB000BE01882311F084E007C08091E30087FD26 -:100CC00002C081E001C083E08093C2019FD1809186 -:100CD000E10083FF22C08091E20083FF1EC080916B -:100CE000E100877F8093E10082E08093C20110924F -:100CF000BE018091E1008E7F8093E1008091E2004F -:100D00008E7F8093E2008091E20080618093E20018 -:100D100080E060E042E00CDE79D1FF91EF91BF917D -:100D2000AF919F918F917F916F915F914F913F9183 -:100D30002F910F900FBE0F901F9018951F93DF9368 -:100D4000CF93CDB7DEB7AC970FB6F894DEBF0FBE2A -:100D5000CDBFE3ECF1E08091F100819321E0EB3C29 -:100D6000F207C9F72ADA8091E80083FF37C1809142 -:100D7000C3013091C401353009F487C0363040F4E6 -:100D80003130C9F1313070F0333009F027C133C050 -:100D9000383009F4F5C0393009F404C1363009F0AF -:100DA0001DC196C0803821F0823809F017C108C0F3 -:100DB0009091BF018091C001882399F0926011C089 -:100DC0008091C7018F708093E9008091EB0090E0E3 -:100DD00025E0969587952A95E1F7982F91701092C6 -:100DE000E9008091E800877F8093E8009093F1000C -:100DF0001092F100D0C0882319F0823009F0EEC0C3 -:100E000090E08F719070009721F0029709F0E6C092 -:100E10000CC08091C501813009F0E0C01092C00182 -:100E2000333069F58093C0012AC08091C5018823C1 -:100E300031F52091C7012F7009F4D0C02093E9004B -:100E40008091EB0080FF1BC0333021F48091EB00D8 -:100E5000806213C08091EB0080618093EB0081E0A1 -:100E600090E002C0880F991F2A95E2F78093EA006C -:100E70001092EA008091EB0088608093EB00109262 -:100E8000E9008091E800877F89C0882309F0A6C027 -:100E90001091C5011F778091E3008078812B8093AA -:100EA000E3008091E800877F8093E800B5DD8091C2 -:100EB000E80080FFFCCF8091E30080688093E3002E -:100EC000112311F482E001C083E08093C20186C047 -:100ED0008058823008F082C08091C5019091C6018F -:100EE00023E08C3D920709F033C083E08C838AE2D3 -:100EF0008B837FB7F894DE0115966EE040E050E0FA -:100F000011E2E62FF0E010935700849140FF03C0F8 -:100F100082958F706F5F8F70282F30E08A3018F0C5 -:100F2000C901C79602C0C901C0968D939D934F5FBA -:100F30005F4F4431510529F77FBF8091E800877FDB -:100F40008093E800CE0103966AE270E07FDB12C076 -:100F50006091C701AE014F5F5F4F71D9BC0100972F -:100F600009F43CC08091E800877F8093E800898184 -:100F70009A81D2DB8091E8008B778093E8002EC0C5 -:100F8000803861F58091E800877F8093E800809148 -:100F9000BE018093F1008091E8008E778093E80095 -:100FA0003BDD1CC08823D1F49091C5019230B0F490 -:100FB0008091E800877F8093E8009093BE012CDD4C -:100FC0008091BE01882331F48091E30087FD02C047 -:100FD00081E001C084E08093C201F0D88091E800F4 -:100FE00083FF0AC08091E800877F8093E8008091AA -:100FF000EB0080628093EB00AC960FB6F894DEBFF6 -:101000000FBECDBFCF91DF911F91089508951F931B -:101010008091C201882371F01091E9008091EC0069 -:101020001092E9008091E80083FF01C087DE1F7005 -:101030001093E9001F910895FC018091C201843052 -:10104000C9F486818F708093E9008091E80085FF64 -:1010500011C0CB0164E070E040E050E0C5DB80915E -:10106000E80085FD05C08091E8008B778093E8005B -:1010700081E0089580E00895FC018091C2018430F0 -:1010800011F082E0089581818F708093E900409192 -:10109000F3002091F200942F80E030E0822B932B1C -:1010A000892B11F480E008958091E8008E77809379 -:1010B000E800D3CCFC018091C201843051F48181DD -:1010C0008F708093E9008091E80080FF02C0CF011B -:1010D000D3CF0895FC018091C201843011F092E0D9 -:1010E00016C081818F708093E900CB0164E070E0CD -:1010F00040E050E0CBDB982F882349F48091E80052 -:1011000085FD05C08091E8008E778093E800892FE7 -:101110000895CF93DF93EC011B8682E08C8389874F -:10112000CE01019661E03CDC882331F0CE010696C9 -:1011300061E036DC811181E0DF91CF910895F89470 -:02114000FFCFDF -:101142000182400000010140000001000A0A7D23E3 -:101152004104F07E7F0406027D0423410104020162 -:0A11620002040000010621F700005E +:10019000E8E3F1E102C005900D92AA32B107D9F768 +:1001A00011E0AAE2B1E001C01D92AF3CB107E1F756 +:1001B00002D0C0C725CF1ED020D0FECF089508950D +:1001C000089585E091E0A0C784B7877F84BF88E168 +:1001D0000FB6F89480936000109260000FBE80E02C +:1001E00090E020E80FB6F8942093610080936100BE +:1001F0000FBEBCC4E9DF7894089585E091E06DEA14 +:1002000071E015D7882391F08091AD01877071F06E +:100210008091AD018F7082FF09C06091AD01709136 +:10022000AE018091AF019091B001D1D085E091E015 +:100230003CD7E8C6DA01923049F0933061F0913052 +:10024000F9F4ECEAF0E022E130E01EC0EEEBF0E081 +:1002500025E630E019C0813049F0813018F0823055 +:1002600079F408C0E3E2F1E0849107C0E7E2F1E04D +:10027000849103C0E9E4F1E08491282F30E004C0C8 +:10028000E0E0F0E020E030E0ED93FC93C901089558 +:1002900011D4F89488E893E120E931E0F90131972D +:1002A000F1F70197D9F787E797E7909301088093D3 +:1002B00000082CE088E190E00FB6F894A8958093B0 +:1002C00060000FBE20936000FFCFCF93DF9380913B +:1002D000B4018E3731F08F3709F476C08D37F9F4D9 +:1002E00019C08091B701863009F06EC08091B801C5 +:1002F000813009F069C0C1E1D1E085E091E0BE0143 +:10030000E4D6249681E0C932D807B9F785E091E0B8 +:10031000AED65AC08091B9018E3109F4B9DF10927E +:100320002C0120E047C080912C01E82FF0E0ED0186 +:10033000CC0FDD1FCC0FDD1FCE54DE4F9981E35D66 +:10034000FE4F90838F5F80932C0188818F70853062 +:1003500081F188818F708F3061F180912C01E82FBD +:10036000F0E0AA0FBB1FAA0FBB1FAC54BE4F9C915D +:10037000E35DFE4F90838F5F80932C0188818F70A7 +:100380008630B9F088818F708C3099F088818F70B9 +:100390008D3079F088818F70823059F080912C01F6 +:1003A000E82FF0E09B81E35DFE4F90838F5F8093A9 +:1003B0002C012F5FA22FB0E080912A0190912B0198 +:1003C000A817B9070CF4AFCFDF91CF910895CF9361 +:1003D000DF939B01AC01A62FAF706A2F70E0CB01B9 +:1003E000877F892B09F42AC1A2FF28C18091B1011E +:1003F000823051F480912A0190912B01813891052E +:100400001CF083E08093B1016430710549F06430E1 +:1004100071050CF413C1683071050CF00FC1DCC01C +:100420008091B1018130E9F1813030F0823021F1E9 +:10043000833009F003C1A8C010922B0110922A0149 +:10044000303F09F0FBC0842F8E57823040F48091FA +:100450000001581751F15F3709F0F0C026C08091B4 +:100460000201481709F0EAC080910301851709F0DD +:10047000E5C081E08093B10180912A0190912B0128 +:10048000FC01EE0FFF1FEE0FFF1FEE54FE4F208307 +:10049000318342835383019690932B0180932A01E9 +:1004A000CDC080910401831711F482E0E3CF83E093 +:1004B0008093B10180912A0190912B01FC01EE0FF4 +:1004C000FF1FEE0FFF1FEE54FE4F20833183428348 +:1004D0005383019690932B0180932A0110922C0153 +:1004E00020E047C080912C01E82FF0E0ED01CC0F17 +:1004F000DD1FCC0FDD1FCE54DE4F9981E35DFE4F33 +:1005000090838F5F80932C0188818F70853081F17B +:1005100088818F708F3061F180912C01E82FF0E09D +:10052000AA0FBB1FAA0FBB1FAC54BE4F9C91E35D2B +:10053000FE4F90838F5F80932C0188818F7086306F +:10054000B9F088818F708C3099F088818F708D30F0 +:1005500079F088818F70823059F080912C01E82FDA +:10056000F0E09B81E35DFE4F90838F5F80932C01D1 +:100570002F5FA22FB0E080912A0190912B01A81744 +:10058000B9070CF4AFCF5AC080912C0190E08D37A1 +:1005900091051CF410922C014FC080912C01E82F82 +:1005A000F0E0E35DFE4F30838F5F80932C018091FC +:1005B0002C01E82FF0E0E35DFE4F40838F5F8093D6 +:1005C0002C0180912C01E82FF0E0E35DFE4F508379 +:1005D0008F5F80932C0132C080912A0190912B0172 +:1005E000FC01EE0FFF1FEE0FFF1FEE54FE4F2083A6 +:1005F000318342835383019690932B0180932A0188 +:100600008091B101823011F460DE16C080912C011E +:10061000E82FF0E0E35DFE4F30838F5F80932C0185 +:10062000A53051F080912C01E82FF0E0E35DFE4F02 +:1006300040838F5F80932C011092B101DF91CF91A5 +:1006400008959C014091CD015091CE014617570766 +:1006500018F4F90190E045C06115710511F0AB0186 +:10066000F8CF8091E8008E778093E80040E050E07A +:10067000F0CF8091C601882309F445C0853009F484 +:1006800044C08091E80083FF02C081E0089580911A +:10069000E80082FD32C08091E80080FF22C0809196 +:1006A000F3009091F200782F60E0292F30E0262BA4 +:1006B000372B07C081918093F100415050402F5F4C +:1006C0003F4F4115510519F02830310598F390E05E +:1006D0002830310509F491E08091E8008E7780930D +:1006E000E8004115510529F6992319F606C08091B5 +:1006F000C601882341F0853041F08091E80082FFF7 +:10070000F6CF80E0089582E0089583E008959C018B +:100710004091CD015091CE014617570718F4F901C9 +:1007200090E046C06115710511F0AB01F8CF8091E2 +:10073000E8008E778093E80040E050E0F0CF8091B1 +:10074000C601882309F447C0853009F446C080916A +:10075000E80083FF02C081E008958091E80082FDF7 +:1007600034C08091E80080FF23C08091F300909115 +:10077000F200782F60E0292F30E0262B372B08C0BD +:1007800084918093F1003196415050402F5F3F4F4C +:100790004115510519F02830310590F390E02830CB +:1007A000310509F491E08091E8008E778093E800AC +:1007B0004115510521F6992309F0C1CF06C080915A +:1007C000C601882341F0853041F08091E80082FF26 +:1007D000F6CF80E0089582E0089583E00895BF9207 +:1007E000CF92DF92EF92FF920F931F93CF93DF93FD +:1007F000182F092F7B016A012BD1B82E8823B1F560 +:10080000812F902F9C01E901C114D10439F0F60128 +:1008100080819181E81AF90AC80FD91F00E010E021 +:1008200022C08091E80085FD16C08091E8008B779A +:100830008093E800E7D3C114D10449F0F601808128 +:100840009181800F911F9183808385E010C000D13A +:10085000882349F00CC08091F10089930894E10845 +:10086000F1080F5F1F4FE114F104D9F68B2DDF91D2 +:10087000CF911F910F91FF90EF90DF90CF90BF909D +:100880000895BF92CF92DF92EF92FF920F931F9342 +:10089000CF93DF93182F092F7B016A01D9D0B82E8F +:1008A0008823B1F5812F902F9C01E901C114D10457 +:1008B00039F0F60180819181E81AF90AC80FD91F31 +:1008C00000E010E022C08091E80085FD16C0809114 +:1008D000E8008E778093E80095D3C114D10449F0E5 +:1008E000F60180819181800F911F9183808385E043 +:1008F00010C0AED0882349F00CC089918093F100DC +:100900000894E108F1080F5F1F4FE114F104D9F6D4 +:100910008B2DDF91CF911F910F91FF90EF90DF9082 +:10092000CF90BF900895382F282F2EC0822F8F7020 +:100930008093E900231721F4762F942F50E006C00E +:100940007091EC009091ED005091F00091FF1BC070 +:100950008091EB008E7F8093EB008091ED008D7F86 +:100960008093ED008091EB0081608093EB007093A9 +:10097000EC009093ED005093F0008091EE0087FD25 +:1009800002C080E008952F5F273080F23F703093DF +:10099000E90081E008950F931F93CF93DF93062F13 +:1009A000EC0110E02AC09881992329F16B81E9813B +:1009B000FA812C81892F8F70873018F5223010F43E +:1009C00052E001C056E040E028E030E003C04F5F55 +:1009D000220F331F2E173F07D0F36295660F660F65 +:1009E000607C991F9927991F692B4295407F452B61 +:1009F0009ADF882331F01F5F25961017A0F281E05F +:100A000001C080E0DF91CF911F910F9108958091F7 +:100A1000C70188239CF404C08091C6018823B9F0E3 +:100A20008091E80082FFF8CF8091E8008B77809377 +:100A3000E80008958091C601882349F08091E8007C +:100A400080FFF8CF8091E8008E778093E8000895CA +:100A50004091E4005091E50024E68091EC0080FF95 +:100A600024C08091E80080FD1EC08091C6018823CB +:100A700011F482E00895853011F483E008958091A7 +:100A8000EB0085FF02C081E008958091E400909121 +:100A9000E5008417950709F3222311F484E00895F3 +:100AA0002150AC01DACF80E008958091E80082FF08 +:100AB000DCCFF9CF6BD072D0E0EEF0E080818160C6 +:100AC0008083A8EDB0E08C918F778C9319BCE7ED13 +:100AD000F0E080818E7F80838C918F7E8C9310924A +:100AE000C5010895EF92FF920F931F934FD056D0F8 +:100AF00008ED10E0F80180818F7780838081806825 +:100B0000808380818F7D808319BC1092C6011092F2 +:100B1000C2011092C4011092C30180EEE82EF12CA4 +:100B2000F70180818B7F8083F801808181608083E1 +:100B300080E060E042E0F7DEE1EEF0E080818E7F71 +:100B40008083E2EEF0E08081816080838081886034 +:100B50008083F70180818E7F8083F80180818061AE +:100B600080831F910F91FF90EF900895E8EDF0E0E2 +:100B700080818F7E8083E7EDF0E0808181608083DB +:100B800084E082BF81E08093C501ACCFE8EDF0E066 +:100B900080818E7F80831092E20008951092DA00A7 +:100BA0001092E10008951F920F920FB60F92112438 +:100BB0002F933F934F935F936F937F938F939F9365 +:100BC000AF93BF93EF93FF938091E10082FF0AC040 +:100BD0008091E20082FF06C08091E1008B7F8093CC +:100BE000E1000FD28091DA0080FF1DC08091D80013 +:100BF00080FF19C08091DA008E7F8093DA008091A7 +:100C0000D90080FF0CC080E189BD82E189BD09B4B3 +:100C100000FEFDCF81E08093C601D0DA04C019BC8C +:100C20001092C601CCDA8091E10080FF18C080915B +:100C3000E20080FF14C08091E2008E7F8093E2008A +:100C40008091E20080618093E2008091D800806210 +:100C50008093D80019BC85E08093C601D2D18091E1 +:100C6000E10084FF2FC08091E20084FF2BC080E16F +:100C700089BD82E189BD09B400FEFDCF8091D80015 +:100C80008F7D8093D8008091E1008F7E8093E1007A +:100C90008091E2008F7E8093E2008091E20081608B +:100CA0008093E2008091C201882311F084E007C0A4 +:100CB0008091E30087FD02C081E001C083E0809362 +:100CC000C6019FD18091E10083FF22C08091E200A4 +:100CD00083FF1EC08091E100877F8093E10082E066 +:100CE0008093C6011092C2018091E1008E7F8093B3 +:100CF000E1008091E2008E7F8093E2008091E2002B +:100D000080618093E20080E060E042E00CDE79D117 +:100D1000FF91EF91BF91AF919F918F917F916F91D3 +:100D20005F914F913F912F910F900FBE0F901F90A9 +:100D300018951F93DF93CF93CDB7DEB7AC970FB65F +:100D4000F894DEBF0FBECDBFE7ECF1E08091F1007B +:100D5000819321E0EF3CF207C9F732DA8091E80095 +:100D600083FF37C18091C7013091C801353009F444 +:100D700087C0363040F43130C9F1313070F0333053 +:100D800009F027C133C0383009F4F5C0393009F40F +:100D900004C1363009F01DC196C0803821F0823878 +:100DA00009F017C108C09091C3018091C401882344 +:100DB00099F0926011C08091CB018F708093E9000F +:100DC0008091EB0090E025E0969587952A95E1F7D4 +:100DD000982F91701092E9008091E800877F8093AE +:100DE000E8009093F1001092F100D0C0882319F030 +:100DF000823009F0EEC090E08F719070009721F082 +:100E0000029709F0E6C00CC08091C901813009F059 +:100E1000E0C01092C401333069F58093C4012AC048 +:100E20008091C901882331F52091CB012F7009F4FD +:100E3000D0C02093E9008091EB0080FF1BC03330CD +:100E400021F48091EB00806213C08091EB008061FF +:100E50008093EB0081E090E002C0880F991F2A95F3 +:100E6000E2F78093EA001092EA008091EB0088603C +:100E70008093EB001092E9008091E800877F89C0A1 +:100E8000882309F0A6C01091C9011F778091E30063 +:100E90008078812B8093E3008091E800877F8093A6 +:100EA000E800B5DD8091E80080FFFCCF8091E30091 +:100EB00080688093E300112311F482E001C083E095 +:100EC0008093C60186C08058823008F082C080912D +:100ED000C9019091CA0123E08C3D920709F033C00B +:100EE00083E08C838AE28B837FB7F894DE011596CA +:100EF0006EE040E050E011E2E62FF0E01093570082 +:100F0000849140FF03C082958F706F5F8F70282F90 +:100F100030E08A3018F0C901C79602C0C901C096F6 +:100F20008D939D934F5F5F4F4431510529F77FBFEC +:100F30008091E800877F8093E800CE0103966AE203 +:100F400070E07FDB12C06091CB01AE014F5F5F4F5D +:100F500071D9BC01009709F43CC08091E800877FFB +:100F60008093E80089819A81D2DB8091E8008B77B9 +:100F70008093E8002EC0803861F58091E800877F7B +:100F80008093E8008091C2018093F1008091E80095 +:100F90008E778093E8003BDD1CC08823D1F49091CC +:100FA000C9019230B0F48091E800877F8093E80017 +:100FB0009093C2012CDD8091C201882331F480918D +:100FC000E30087FD02C081E001C084E08093C60198 +:100FD000F8D88091E80083FF0AC08091E800877FFD +:100FE0008093E8008091EB0080628093EB00AC96E8 +:100FF0000FB6F894DEBF0FBECDBFCF91DF911F912A +:10100000089508951F938091C601882371F010916F +:10101000E9008091EC001092E9008091E80083FFE4 +:1010200001C087DE1F701093E9001F910895FC0135 +:101030008091C6018430C9F486818F708093E90065 +:101040008091E80085FF11C0CB0164E070E040E0D2 +:1010500050E0C5DB8091E80085FD05C08091E80087 +:101060008B778093E80081E0089580E00895FC018B +:101070008091C601843011F082E0089581818F70E3 +:101080008093E9004091F3002091F200942F80E0DA +:1010900030E0822B932B892B11F480E0089580910E +:1010A000E8008E778093E800D3CCFC018091C601E4 +:1010B000843051F481818F708093E9008091E80041 +:1010C00080FF02C0CF01D3CF0895FC018091C601FB +:1010D000843011F092E016C081818F708093E90016 +:1010E000CB0164E070E040E050E0CBDB982F882338 +:1010F00049F48091E80085FD05C08091E8008E7775 +:101100008093E800892F0895CF93DF93EC011B862D +:1011100082E08C838987CE01019661E03CDC8823E4 +:1011200031F0CE01069661E036DC811181E0DF917D +:08113000CF910895F894FFCF60 +:101138000A0A7D23410182400000010140000001AC +:101148000004F07E7F0406027D04234101040201AD +:0A11580002040000010621F7000068 :00000001FF diff --git a/makefile b/makefile index b9912dd..e6ee07b 100755 --- a/makefile +++ b/makefile @@ -13,12 +13,12 @@ MCU = atmega32u4 ARCH = AVR8 -BOARD = LEONARDO +BOARD = NONE F_CPU = 16000000 F_USB = $(F_CPU) OPTIMIZATION = s TARGET = USB_MIDI -SRC = $(TARGET).c Descriptors.c MinSysex.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) +SRC = main.c USBMidiTransport.c Descriptors.c MinSysex.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) LUFA_PATH = ../../../../LUFA CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ LD_FLAGS = -- cgit v1.2.3