From 4343bd1b3321bd3c5f60f33d072ff0b78008da08 Mon Sep 17 00:00:00 2001 From: Daniel Newbrook <dwn1c21@soton.ac.uk> Date: Wed, 6 Dec 2023 21:17:55 +0000 Subject: [PATCH] Add dma350 stream tests --- nanosoc/sldma350_tech | 2 +- .../common/validation/dma350_stream_tests.c | 507 + .../dma350_stream_tests.hex | 10784 ++++++++++++++++ testcodes/dma350_stream_tests/makefile | 285 + testcodes/excluded_tests.txt | 3 +- 5 files changed, 11579 insertions(+), 2 deletions(-) create mode 100644 software/common/validation/dma350_stream_tests.c create mode 100644 testcodes/dma350_stream_tests/dma350_stream_tests.hex create mode 100644 testcodes/dma350_stream_tests/makefile diff --git a/nanosoc/sldma350_tech b/nanosoc/sldma350_tech index d3a9db1..a69e001 160000 --- a/nanosoc/sldma350_tech +++ b/nanosoc/sldma350_tech @@ -1 +1 @@ -Subproject commit d3a9db1014315bda22e9025b24fc9cda7b064a10 +Subproject commit a69e001167fc5d075728988e2ca1c047e66f3c14 diff --git a/software/common/validation/dma350_stream_tests.c b/software/common/validation/dma350_stream_tests.c new file mode 100644 index 0000000..2e90352 --- /dev/null +++ b/software/common/validation/dma350_stream_tests.c @@ -0,0 +1,507 @@ +#ifdef CORTEX_M0 +#include "CMSDK_CM0.h" +#endif + +#ifdef CORTEX_M0PLUS +#include "CMSDK_CM0plus.h" +#endif + +#ifdef CORTEX_M3 +#include "CMSDK_CM3.h" +#endif + +#ifdef CORTEX_M4 +#include "CMSDK_CM4.h" +#endif + +#include <stdio.h> +#include "uart_stdout.h" +#include "CMSDK_driver.h" + + +#include "config_id.h" +#include <string.h> +#include <inttypes.h> +#include "dma_350_command_lib.h" + +//Channel number defines +// Note: Please add more channels if DMA has more than 8 channels +#define CH0 0 +#define CH1 1 + + +// Note: Please modify the addresses according to the system memory map +#define COPY_ADDR_SRC_0 0x80000000 +#define COPY_ADDR_SRC_1 0x80000100 +#define COPY_ADDR_SRC_2 0x80000200 +#define COPY_ADDR_DST_0 0x98000000 +#define COPY_ADDR_DST_1 0x98000100 +#define COPY_ADDR_DST_2 0x98000200 + + +// Note: Please modify to the desired data size +#define DATA_SIZE 64 +#define LARGE_DATA_SIZE 10000 + +#define HW32_REG(ADDRESS) (*((volatile unsigned long *)(ADDRESS))) + +#if defined ( __CC_ARM ) +__asm void address_test_write(unsigned int addr, unsigned int wdata); +__asm unsigned int address_test_read(unsigned int addr); +#else + void address_test_write(unsigned int addr, unsigned int wdata); + unsigned int address_test_read(unsigned int addr); +#endif + +void HardFault_Handler_c(unsigned int * hardfault_args, unsigned lr_value); + +//typedef unsigned long int uintptr_t; +// Array for command with a Header + 5 modified registers +uint32_t LinkCmd[6]; +// Variable to store the address of the above array +uintptr_t LinkCmd_adr = (uintptr_t) LinkCmd; + +volatile int dma_done_irq_occurred; +volatile int dma_done_irq_expected; +volatile int dma_error_irq_occurred; +volatile int dma_error_irq_expected; +volatile int hardfault_occurred; +volatile int hardfault_expected; +volatile int temp_data; +volatile int current_channel; + +uint8_t dma350_detect(void); +void delay(uint32_t t); +void SystemInitialization(void); +void DMAClearChIrq(uint32_t ch); +void DMA_Handler(void) __attribute__((interrupt)); +void initialise_destination(unsigned int actual_addr); +uint8_t check_destination(unsigned int actual_addr); + +int main(void) { + + // Get the number of channels and trigger interfaces + uint32_t ch_num; + uint32_t trig_in_num; + uint32_t trig_out_num; + uint32_t errors = 0; + unsigned int actual_addr; + hardfault_occurred = 0; + hardfault_expected = 0; + // Call Function for the testbench Specific Initialization + // Note: Change to the system specific function for initialization + SystemInitialization(); + + printf("<--- DMA START --->\n"); + + // Define structures for the tests + // Note: Command and channel parameters can be modified to the desired settings + + // Set the DMA channel related parameters + // Channel Priority is '0' - Lowest Priority + // Cleaning DMA Channel registers at the end of the command is enabled + // Reloading initial register values at the end of the command is disabled + // STATUS_DONE status flag is asserted at the end of the command. + // Automatic pause request at the end of the command is disabled + // Maximum source and destination burst lengths sent by the DMA are 15+1=16 (Can be limited by FIFO size) + AdaChannelSettingsType ch_settings = { + .CHPRIO = 0, + .CLEARCMD = 1, + .REGRELOADTYPE = RELOAD_DISABLED, + .DONETYPE = DONETYPE_EOF_CMD, + .DONEPAUSEEN = 0, + .SRCMAXBURSTLEN = 15, + .DESMAXBURSTLEN = 15 + }; + AdaChannelSettingsType ch_settings_no_burst = { + .CHPRIO = 0, + .CLEARCMD = 1, + .REGRELOADTYPE = RELOAD_DISABLED, + .DONETYPE = DONETYPE_EOF_CMD, + .DONEPAUSEEN = 0, + .SRCMAXBURSTLEN = 0, + .DESMAXBURSTLEN = 0 + }; + + // Set the attributes of the read AXI transactions sent by the DMA + // These settings affects the ARINNER[3:0], AWINNER[3:0], ARCACHE[3:0], AWCACHE[3:0] and AxDOMAIN[1:0] attributes + // of the AXI transactions + // This command uses Normal memory, Non-Cacheable, Bufferable, System-shareable AXI attributes + // ARINNER[3:0] = 4'b0011, AWINNER[3:0] = 4'b0011, ARCACHE[3:0] = 4'b0011, AWCACHE[3:0] = 4'b0011, AxDOMAIN[1:0] = 2'b11 + // More information about the AXI attribute settings can be found in the TRM + // The command uses non-secure, non-privileged AXI read transactions + AdaChannelSrcAttrType ch_srcattr = { + .SRCMEMATTRLO = 4, + .SRCMEMATTRHI = 4, + .SRCSHAREATTR = 0, + .SRCNONSECATTR = 1, + .SRCPRIVATTR = 0 + }; + + // Set the attributes of the write AXI transactions sent by the DMA + // These settings affects the ARINNER[3:0], AWINNER[3:0], ARCACHE[3:0], AWCACHE[3:0] and AxDOMAIN[1:0] attributes + // of the AXI transactions + // This command uses Normal memory, Non-Cacheable, Bufferable, System-shareable AXI attributes + // ARINNER[3:0] = 4'b0011, AWINNER[3:0] = 4'b0011, ARCACHE[3:0] = 4'b0011, AWCACHE[3:0] = 4'b0011, AxDOMAIN[1:0] = 2'b11 + // More information about the AXI attribute settings can be found in the TRM + // The command uses non-secure, non-privileged AXI write transactions + AdaChannelDesAttrType ch_desattr = { + .DESMEMATTRLO = 4, + .DESMEMATTRHI = 4, + .DESSHAREATTR = 0, + .DESNONSECATTR = 1, + .DESPRIVATTR = 0 + }; + + // Set the attributes of the read AXI transactions used for the command link related transfers + AdaChannelLinkAttrType ch_linkattr = { + .LINKMEMATTRLO = 4, + .LINKMEMATTRHI = 4, + .LINKSHAREATTR = 0 + }; + + + AdaBaseCommandType str_command_base_0 = { + .SRCADDR = COPY_ADDR_SRC_0, // Read from M0 interface + .DESADDR = COPY_ADDR_DST_0, // Write to M1 interface + .SRCXSIZE = DATA_SIZE, + .DESXSIZE = DATA_SIZE, + .TRANSIZE = BITS_32 + }; + AdaBaseCommandType str_command_base_1 = { + .SRCADDR = COPY_ADDR_SRC_1, // Read from M0 interface + .DESADDR = COPY_ADDR_DST_1, // Write to M1 interface + .SRCXSIZE = DATA_SIZE, + .DESXSIZE = DATA_SIZE, + .TRANSIZE = BITS_32 + }; + AdaBaseCommandType str_command_base_2 = { + .SRCADDR = COPY_ADDR_SRC_2, // Read from M0 interface + .DESADDR = COPY_ADDR_DST_2, // Write to M1 interface + .SRCXSIZE = DATA_SIZE, + .DESXSIZE = DATA_SIZE, + .TRANSIZE = BITS_32 + }; + // Set the increment of source and destination addresses + // The source and destination address increments are 1 + Ada1DIncrCommandType command_1d_incr = { + .SRCXADDRINC = 1, // Autoincrement by transaction size + .DESXADDRINC = 1 // Autoincrement by transaction size + }; + + // Set the transfer types (2D and wrapping support) + // The transaction type is 1D basic transfer + AdaWrapCommandType command_1d_wrap = { + .FILLVAL = 0, + .XTYPE = OPTYPE_CONTINUE, + .YTYPE = OPTYPE_DISABLE + }; + + // Enable/disable the interupts of the channel + // Error and done interrupts are enabled + AdaIrqEnType ch_irqs = { + .INTREN_DONE = 1, + .INTREN_ERR = 1, + .INTREN_DISABLED = 0, + .INTREN_STOPPED = 0 + }; + + // Set stream type + // Both stream in and out interfaces are used + AdaStreamType command_stream = { + .STREAMTYPE = IN_AND_OUT + } ; + + + if(dma350_detect()!=0){ + return 0; + } + + //Initialize TCM + printf("Initialize SRAM... "); + actual_addr = str_command_base_0.SRCADDR; + unsigned int test_data[str_command_base_0.SRCXSIZE]; + int j; + for(j = 0; j < 64; j++){ + test_data[j] = j; + address_test_write(actual_addr,test_data[j]); + //printf("Written data: 0x%x to address 0x%x \n", test_data[j], actual_addr); + actual_addr = actual_addr+4; + } + actual_addr = str_command_base_1.SRCADDR; + for(j = 0; j < 64; j++){ + address_test_write(actual_addr,test_data[j]); + //printf("Written data: 0x%x to address 0x%x \n", test_data[j], actual_addr); + actual_addr = actual_addr+4; + } + actual_addr = str_command_base_2.SRCADDR; + for(j = 0; j < 64; j++){ + address_test_write(actual_addr,test_data[j]); + //printf("Written data: 0x%x to address 0x%x \n", test_data[j], actual_addr); + actual_addr = actual_addr+4; + } + printf("done\n"); + + + //Get the configuration information + ch_num = AdaGetChNum(SECURE); + trig_in_num = AdaGetTrigInNum(SECURE); + trig_out_num = AdaGetTrigOutNum(SECURE); + + //Display the config parameters read + printf("Number of DMA channels: %d \n", ch_num); + printf("Number of DMA trigger inputs: %d \n", trig_in_num); + printf("Number of DMA trigger outputs: %d \n", trig_out_num); + + + printf("---STARTING Stream interface tests---\n"); + __enable_irq(); + for (uint32_t ch=0; ch < ch_num; ch++) { + current_channel=ch; + // + // Write all settings to the DMA registers + AdaChannelInit(ch_settings, ch_srcattr, ch_desattr, ch, SECURE); + Ada1DIncrCommand(str_command_base_0, command_1d_incr, ch, SECURE); + AdaStreamInit(command_stream, ch, SECURE); + AdaStreamEnable(1 ,ch, SECURE); + AdaSetIntEn(ch_irqs, ch, SECURE); + + + dma_done_irq_expected = 1; + dma_done_irq_occurred = 0; + NVIC_ClearPendingIRQ(DMA_IRQn); + NVIC_EnableIRQ(DMA_IRQn); + + + printf("DMA %d configured. Starting the transfer.\n", ch); + + + // Start DMA operation and wait for done IRQ + AdaEnable(ch, SECURE); + __WFI(); + printf("Return from interrupt\n"); + + //AdaClearChDone(ch, SECURE); + printf("DMA transfer finished\n"); + + if (check_destination(str_command_base_0.DESADDR)!=0){ + errors++; + } + else{ + printf("Passed\n"); + } + + initialise_destination(str_command_base_0.DESADDR); + // Disable channel and stream + AdaDisable(ch, SECURE); + AdaStreamEnable(0 ,ch, SECURE); + } + + + + + NVIC_DisableIRQ(DMA_IRQn); + __disable_irq(); + + if(errors!=0){ + printf("\n** TEST FAILED **, Error code = (0x%x)\n",errors); + } else { + printf ("\n** TEST PASSED **\n"); + } + + UartEndSimulation(); + return 0; +} + +// Setup all components in the system +void SystemInitialization(void){ + // Initialize the system. For example clock gating, PPU, SAU, security components, peripherals etc. + // Note: This function should setup all system components + // UART init + UartStdOutInit(); + + // Test banner message and revision number + puts("\nCortex Microcontroller System Design Kit - DMA Test - revision $Revision: 371321 $\n"); +} + +uint8_t dma350_detect(void) +{ + uint8_t result; + int volatile rdata; + unsigned const int dma350_iidr = 0x3a00043b; + puts("Detect if DMA350 controller is present..."); + hardfault_occurred = 0; + hardfault_expected = 1; + rdata = address_test_read(ADA_DMA_S_BASE+0xFC8); + hardfault_expected = 0; + result = hardfault_occurred ? 1 : (rdata!=dma350_iidr); + if (result!=0) { + puts("** TEST SKIPPED ** DMA controller is not present.\n"); + UartEndSimulation(); + } + return(result); +} + +void initialise_destination(unsigned int actual_addr) +{ + int j; + for(j = 0; j < 64; j++){ + address_test_write(actual_addr,0); + //printf("Written data: 0x%x to address 0x%x \n", test_data[j], actual_addr); + actual_addr = actual_addr+4; + } +} + +uint8_t check_destination(unsigned int actual_addr) +{ + uint32_t mismatches=0; + uint32_t value; + int j; + for(j = 0; j < 64; j++){ + if (address_test_read(actual_addr)!=j) + { + mismatches++; + } + //printf("Written data: 0x%x to address 0x%x \n", test_data[j], actual_addr); + actual_addr = actual_addr+4; + } + return mismatches; +} + +#if defined ( __CC_ARM ) +/* Test function for write - for ARM / Keil */ +__asm void address_test_write(unsigned int addr, unsigned int wdata) +{ + STR R1,[R0] + DSB ; Ensure bus fault occurred before leaving this subroutine + BX LR +} + +#else +/* Test function for write - for gcc */ +void address_test_write(unsigned int addr, unsigned int wdata) __attribute__((naked)); +void address_test_write(unsigned int addr, unsigned int wdata) +{ + __asm(" str r1,[r0]\n" + " dsb \n" + " bx lr \n" + ); +} +#endif + +/* Test function for read */ +#if defined ( __CC_ARM ) +/* Test function for read - for ARM / Keil */ +__asm unsigned int address_test_read(unsigned int addr) +{ + LDR R1,[R0] + DSB ; Ensure bus fault occurred before leaving this subroutine + MOVS R0, R1 + BX LR +} +#else +/* Test function for read - for gcc */ +unsigned int address_test_read(unsigned int addr) __attribute__((naked)); +unsigned int address_test_read(unsigned int addr) +{ + __asm(" ldr r1,[r0]\n" + " dsb \n" + " movs r0, r1 \n" + " bx lr \n" + ); +} +#endif + +// Function for the Channel interrupt handlers +void DMAClearChIrq(uint32_t ch) { + // Check the source of the interrupt and clear interrupts + AdaStatType ST = AdaReadStatus(ch, SECURE); + if (ST.STAT_DONE == 1) { + AdaClearChDone(ch, SECURE); + } else if (ST.STAT_ERR == 1) { + AdaClearChError(ch, SECURE); + } else if (ST.STAT_DISABLED == 1) { + AdaClearChDisabled(ch, SECURE); + } else if (ST.STAT_STOPPED == 1) { + AdaClearChStopped(ch, SECURE); + } else { + printf("Unknown IRQ on CH%d!\n", ch); + } +} + +void DMA_Handler(void){ + __disable_irq(); + DMAClearChIrq(current_channel); + dma_done_irq_occurred++; + __enable_irq(); + return; +} + +#if defined ( __CC_ARM ) +/* ARM or Keil toolchain */ +__asm void HardFault_Handler(void) +{ + MOVS r0, #4 + MOV r1, LR + TST r0, r1 + BEQ stacking_used_MSP + MRS R0, PSP ; // first parameter - stacking was using PSP + B get_LR_and_branch +stacking_used_MSP + MRS R0, MSP ; // first parameter - stacking was using MSP +get_LR_and_branch + MOV R1, LR ; // second parameter is LR current value + LDR R2,=__cpp(HardFault_Handler_c) + BX R2 + ALIGN +} +#else +/* gcc toolchain */ +void HardFault_Handler(void) __attribute__((naked)); +void HardFault_Handler(void) +{ + __asm(" movs r0,#4\n" + " mov r1,lr\n" + " tst r0,r1\n" + " beq stacking_used_MSP\n" + " mrs r0,psp\n" /* first parameter - stacking was using PSP */ + " ldr r1,=HardFault_Handler_c \n" + " bx r1\n" + "stacking_used_MSP:\n" + " mrs r0,msp\n" /* first parameter - stacking was using PSP */ + " ldr r1,=HardFault_Handler_c \n" + " bx r1\n" + ".pool\n" ); +} + +#endif +/* C part of the fault handler - common between ARM / Keil /gcc */ +void HardFault_Handler_c(unsigned int * hardfault_args, unsigned lr_value) +{ + unsigned int stacked_pc; + unsigned int stacked_r0; + hardfault_occurred++; + puts ("[Hard Fault Handler]"); + if (hardfault_expected==0) { + puts ("ERROR : Unexpected HardFault interrupt occurred.\n"); + UartEndSimulation(); + while (1); + } + stacked_r0 = ((unsigned long) hardfault_args[0]); + stacked_pc = ((unsigned long) hardfault_args[6]); + printf(" - Stacked R0 : 0x%x\n", stacked_r0); + printf(" - Stacked PC : 0x%x\n", stacked_pc); + /* Modify R0 to a valid address */ + hardfault_args[0] = (unsigned long) &temp_data; + + return; +} + +void delay(uint32_t t) +{ + int i; + for (i=0;i<t;i++){ + __ISB(); + } + return; +} diff --git a/testcodes/dma350_stream_tests/dma350_stream_tests.hex b/testcodes/dma350_stream_tests/dma350_stream_tests.hex new file mode 100644 index 0000000..699138f --- /dev/null +++ b/testcodes/dma350_stream_tests/dma350_stream_tests.hex @@ -0,0 +1,10784 @@ +90 +04 +00 +30 +ED +07 +00 +00 +F5 +07 +00 +00 +97 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +F9 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +FB +07 +00 +00 +FD +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +AD +04 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +FF +07 +00 +00 +00 +F0 +02 +F8 +00 +F0 +4F +F8 +0C +A0 +30 +C8 +08 +38 +24 +18 +2D +18 +A2 +46 +67 +1E +AB +46 +54 +46 +5D +46 +AC +42 +01 +D1 +00 +F0 +41 +F8 +7E +46 +0F +3E +0F +CC +B6 +46 +01 +26 +33 +42 +00 +D0 +FB +1A +A2 +46 +AB +46 +33 +43 +18 +47 +D4 +28 +00 +00 +F4 +28 +00 +00 +10 +3A +02 +D3 +78 +C8 +78 +C1 +FA +D8 +52 +07 +01 +D3 +30 +C8 +30 +C1 +01 +D5 +04 +68 +0C +60 +70 +47 +00 +00 +00 +23 +00 +24 +00 +25 +00 +26 +10 +3A +01 +D3 +78 +C1 +FB +D8 +52 +07 +00 +D3 +30 +C1 +00 +D5 +0B +60 +70 +47 +10 +B5 +64 +29 +02 +D1 +02 +F0 +C7 +F9 +10 +BD +78 +29 +02 +D1 +02 +F0 +F8 +F9 +10 +BD +00 +20 +10 +BD +1F +B5 +00 +98 +01 +99 +02 +F0 +53 +FA +1F +BD +10 +B5 +10 +BD +02 +F0 +3F +FB +11 +46 +FF +F7 +F3 +FF +00 +F0 +62 +F8 +02 +F0 +57 +FB +03 +B4 +FF +F7 +F2 +FF +03 +BC +00 +F0 +63 +FB +01 +60 +BF +F3 +4F +8F +70 +47 +01 +68 +BF +F3 +4F +8F +08 +00 +70 +47 +04 +20 +71 +46 +08 +42 +02 +D0 +EF +F3 +09 +80 +01 +E0 +EF +F3 +08 +80 +71 +46 +01 +4A +10 +47 +00 +00 +07 +05 +00 +00 +70 +B5 +05 +46 +00 +24 +00 +21 +28 +46 +FF +F7 +E1 +FF +64 +1C +2D +1D +40 +2C +F7 +DB +70 +BD +70 +B5 +00 +25 +06 +46 +2C +46 +30 +46 +FF +F7 +D9 +FF +A0 +42 +00 +D0 +6D +1C +64 +1C +36 +1D +40 +2C +F5 +DB +E8 +B2 +70 +BD +F8 +B5 +D9 +4E +D9 +A0 +02 +F0 +D1 +F9 +E3 +4C +00 +25 +A5 +60 +01 +20 +E0 +60 +E1 +48 +FF +F7 +C3 +FF +00 +90 +E5 +60 +A0 +68 +00 +28 +02 +D1 +00 +98 +B0 +42 +06 +D0 +01 +24 +DC +A0 +02 +F0 +BD +F9 +00 +F0 +30 +FB +00 +E0 +00 +24 +20 +46 +F8 +BD +10 +B5 +00 +F0 +0E +FB +E3 +48 +02 +F0 +B1 +F9 +10 +BD +F0 +B5 +00 +20 +99 +B0 +D1 +4E +16 +90 +07 +46 +B0 +60 +F0 +60 +00 +F0 +00 +FB +DC +48 +02 +F0 +A3 +F9 +DC +A0 +02 +F0 +FA +F8 +E0 +48 +08 +AD +01 +68 +12 +91 +81 +68 +11 +91 +C1 +68 +10 +91 +01 +46 +28 +31 +1E +C9 +1E +C5 +01 +46 +38 +31 +1E +C9 +1E +C5 +81 +6C +06 +91 +01 +46 +8D +6E +41 +69 +18 +91 +80 +69 +14 +90 +B2 +4C +15 +97 +B2 +A0 +02 +F0 +83 +F9 +B7 +60 +01 +20 +F0 +60 +BB +48 +FF +F7 +77 +FF +00 +90 +F7 +60 +B0 +68 +00 +28 +02 +D1 +00 +98 +A0 +42 +07 +D0 +B7 +A0 +02 +F0 +72 +F9 +00 +F0 +E5 +FA +00 +20 +19 +B0 +F0 +BD +C8 +A0 +02 +F0 +C4 +F8 +0C +98 +08 +9F +80 +00 +02 +F0 +68 +F8 +00 +24 +17 +90 +17 +98 +A1 +00 +44 +50 +21 +46 +38 +46 +FF +F7 +52 +FF +64 +1C +3F +1D +40 +2C +F4 +DB +06 +9F +00 +24 +17 +98 +A1 +00 +41 +58 +38 +46 +FF +F7 +46 +FF +64 +1C +3F +1D +40 +2C +F5 +DB +00 +24 +17 +98 +A1 +00 +41 +58 +28 +46 +FF +F7 +3B +FF +64 +1C +2D +1D +40 +2C +F5 +DB +B7 +A0 +02 +F0 +98 +F8 +00 +20 +02 +F0 +15 +F8 +13 +90 +00 +20 +02 +F0 +1B +F8 +04 +46 +00 +20 +02 +F0 +20 +F8 +05 +46 +B1 +A0 +13 +99 +02 +F0 +88 +F8 +21 +46 +B7 +A0 +02 +F0 +84 +F8 +29 +46 +BE +A0 +02 +F0 +80 +F8 +C5 +A0 +02 +F0 +7D +F8 +62 +B6 +00 +25 +13 +98 +00 +28 +69 +D9 +89 +4C +65 +61 +00 +26 +2B +46 +00 +96 +10 +9A +11 +99 +12 +98 +00 +F0 +30 +FC +18 +98 +06 +96 +05 +95 +0C +AF +04 +90 +0F +CF +6F +46 +0F +C7 +08 +AF +0F +CF +00 +F0 +D6 +FC +00 +22 +29 +46 +15 +98 +01 +F0 +8D +FA +00 +22 +29 +46 +01 +20 +01 +F0 +A2 +FA +00 +22 +29 +46 +14 +98 +00 +F0 +D3 +FF +01 +20 +60 +60 +26 +60 +B7 +49 +C0 +03 +08 +60 +B7 +49 +08 +60 +29 +46 +B6 +A0 +02 +F0 +47 +F8 +00 +21 +28 +46 +00 +F0 +84 +FA +30 +BF +BD +A0 +02 +F0 +3F +F8 +C2 +A0 +02 +F0 +3C +F8 +00 +27 +0A +9E +3C +46 +30 +46 +FF +F7 +D6 +FE +A0 +42 +00 +D0 +7F +1C +64 +1C +36 +1D +40 +2C +F5 +DB +38 +06 +00 +0E +03 +D0 +16 +98 +40 +1C +16 +90 +02 +E0 +BC +A0 +02 +F0 +25 +F8 +0A +9C +00 +26 +00 +21 +20 +46 +FF +F7 +BB +FE +24 +1D +76 +1C +40 +2E +F7 +DB +00 +21 +28 +46 +00 +F0 +71 +FA +00 +22 +29 +46 +10 +46 +01 +F0 +5C +FA +13 +98 +6D +1C +85 +42 +95 +D3 +01 +20 +B1 +49 +C0 +03 +08 +60 +72 +B6 +16 +98 +00 +28 +04 +D0 +01 +46 +AE +A0 +02 +F0 +02 +F8 +02 +E0 +B7 +A0 +01 +F0 +FE +FF +00 +F0 +17 +FA +17 +98 +01 +F0 +D3 +FF +00 +20 +19 +B0 +F0 +BD +10 +B5 +04 +46 +00 +21 +00 +F0 +24 +FE +C1 +07 +04 +D0 +00 +21 +20 +46 +00 +F0 +83 +FE +10 +BD +81 +07 +04 +D5 +00 +21 +20 +46 +00 +F0 +95 +FE +10 +BD +41 +07 +04 +D5 +00 +21 +20 +46 +00 +F0 +A7 +FE +10 +BD +00 +07 +04 +D5 +00 +21 +20 +46 +00 +F0 +B9 +FE +10 +BD +21 +46 +A5 +A0 +01 +F0 +D1 +FF +10 +BD +70 +B5 +72 +B6 +34 +4C +65 +69 +00 +21 +28 +46 +00 +F0 +FB +FD +C1 +07 +04 +D0 +00 +21 +28 +46 +00 +F0 +5A +FE +18 +E0 +81 +07 +04 +D5 +00 +21 +28 +46 +00 +F0 +6C +FE +11 +E0 +41 +07 +04 +D5 +00 +21 +28 +46 +00 +F0 +7E +FE +0A +E0 +00 +07 +04 +D5 +00 +21 +28 +46 +00 +F0 +90 +FE +03 +E0 +29 +46 +91 +A0 +01 +F0 +A8 +FF +20 +68 +40 +1C +20 +60 +62 +B6 +70 +BD +70 +B5 +1E +4D +04 +46 +A8 +68 +40 +1C +A8 +60 +90 +A0 +02 +F0 +40 +F8 +E8 +68 +00 +28 +0B +D0 +93 +A0 +A5 +69 +21 +68 +01 +F0 +92 +FF +29 +46 +96 +A0 +01 +F0 +8E +FF +9A +48 +20 +60 +70 +BD +9A +A0 +02 +F0 +2E +F8 +00 +F0 +A1 +F9 +FE +E7 +00 +21 +00 +28 +04 +D9 +BF +F3 +6F +8F +49 +1C +81 +42 +FA +D3 +70 +47 +3B +04 +00 +3A +44 +65 +74 +65 +63 +74 +20 +69 +66 +20 +44 +4D +41 +33 +35 +30 +20 +63 +6F +6E +74 +72 +6F +6C +6C +65 +72 +20 +69 +73 +20 +70 +72 +65 +73 +65 +6E +74 +2E +2E +2E +00 +00 +00 +00 +00 +00 +30 +C8 +CF +00 +40 +2A +2A +20 +54 +45 +53 +54 +20 +53 +4B +49 +50 +50 +45 +44 +20 +2A +2A +20 +44 +4D +41 +20 +63 +6F +6E +74 +72 +6F +6C +6C +65 +72 +20 +69 +73 +20 +6E +6F +74 +20 +70 +72 +65 +73 +65 +6E +74 +2E +0A +00 +00 +78 +29 +00 +00 +3C +2D +2D +2D +20 +44 +4D +41 +20 +53 +54 +41 +52 +54 +20 +2D +2D +2D +3E +0A +00 +00 +00 +00 +C8 +28 +00 +00 +49 +6E +69 +74 +69 +61 +6C +69 +7A +65 +20 +53 +52 +41 +4D +2E +2E +2E +20 +00 +64 +6F +6E +65 +0A +00 +00 +00 +4E +75 +6D +62 +65 +72 +20 +6F +66 +20 +44 +4D +41 +20 +63 +68 +61 +6E +6E +65 +6C +73 +3A +20 +25 +64 +20 +0A +00 +00 +00 +00 +4E +75 +6D +62 +65 +72 +20 +6F +66 +20 +44 +4D +41 +20 +74 +72 +69 +67 +67 +65 +72 +20 +69 +6E +70 +75 +74 +73 +3A +20 +25 +64 +20 +0A +00 +00 +4E +75 +6D +62 +65 +72 +20 +6F +66 +20 +44 +4D +41 +20 +74 +72 +69 +67 +67 +65 +72 +20 +6F +75 +74 +70 +75 +74 +73 +3A +20 +25 +64 +20 +0A +00 +2D +2D +2D +53 +54 +41 +52 +54 +49 +4E +47 +20 +53 +74 +72 +65 +61 +6D +20 +69 +6E +74 +65 +72 +66 +61 +63 +65 +20 +74 +65 +73 +74 +73 +2D +2D +2D +0A +00 +00 +80 +E2 +00 +E0 +00 +E1 +00 +E0 +44 +4D +41 +20 +25 +64 +20 +63 +6F +6E +66 +69 +67 +75 +72 +65 +64 +2E +20 +53 +74 +61 +72 +74 +69 +6E +67 +20 +74 +68 +65 +20 +74 +72 +61 +6E +73 +66 +65 +72 +2E +0A +00 +00 +52 +65 +74 +75 +72 +6E +20 +66 +72 +6F +6D +20 +69 +6E +74 +65 +72 +72 +75 +70 +74 +0A +00 +00 +44 +4D +41 +20 +74 +72 +61 +6E +73 +66 +65 +72 +20 +66 +69 +6E +69 +73 +68 +65 +64 +0A +00 +00 +50 +61 +73 +73 +65 +64 +0A +00 +80 +E1 +00 +E0 +0A +2A +2A +20 +54 +45 +53 +54 +20 +46 +41 +49 +4C +45 +44 +20 +2A +2A +2C +20 +45 +72 +72 +6F +72 +20 +63 +6F +64 +65 +20 +3D +20 +28 +30 +78 +25 +78 +29 +0A +00 +00 +00 +00 +0A +2A +2A +20 +54 +45 +53 +54 +20 +50 +41 +53 +53 +45 +44 +20 +2A +2A +0A +00 +55 +6E +6B +6E +6F +77 +6E +20 +49 +52 +51 +20 +6F +6E +20 +43 +48 +25 +64 +21 +0A +00 +00 +00 +5B +48 +61 +72 +64 +20 +46 +61 +75 +6C +74 +20 +48 +61 +6E +64 +6C +65 +72 +5D +00 +00 +00 +00 +20 +2D +20 +53 +74 +61 +63 +6B +65 +64 +20 +52 +30 +20 +3A +20 +30 +78 +25 +78 +0A +00 +00 +00 +20 +2D +20 +53 +74 +61 +63 +6B +65 +64 +20 +50 +43 +20 +3A +20 +30 +78 +25 +78 +0A +00 +00 +00 +10 +00 +00 +30 +45 +52 +52 +4F +52 +20 +3A +20 +55 +6E +65 +78 +70 +65 +63 +74 +65 +64 +20 +48 +61 +72 +64 +46 +61 +75 +6C +74 +20 +69 +6E +74 +65 +72 +72 +75 +70 +74 +20 +6F +63 +63 +75 +72 +72 +65 +64 +2E +0A +00 +00 +00 +04 +49 +03 +48 +08 +60 +70 +47 +02 +49 +01 +48 +08 +60 +70 +47 +00 +E1 +F5 +05 +18 +00 +00 +30 +07 +48 +80 +47 +07 +48 +00 +47 +FE +E7 +FE +E7 +FE +E7 +FE +E7 +FE +E7 +FE +E7 +04 +48 +05 +49 +05 +4A +06 +4B +70 +47 +00 +00 +DD +07 +00 +00 +C1 +00 +00 +00 +90 +00 +00 +30 +90 +04 +00 +30 +90 +02 +00 +30 +90 +02 +00 +30 +10 +B5 +C0 +B2 +00 +F0 +1E +F8 +10 +BD +10 +B5 +00 +F0 +20 +F8 +00 +F0 +18 +F8 +10 +BD +00 +20 +C0 +43 +70 +47 +10 +B5 +C0 +B2 +00 +F0 +10 +F8 +10 +BD +FE +E7 +41 +20 +10 +49 +40 +01 +08 +61 +01 +22 +8A +60 +0E +49 +08 +61 +03 +20 +88 +60 +0D +49 +20 +20 +88 +61 +70 +47 +0A +49 +4A +68 +D2 +07 +FC +D1 +08 +60 +70 +47 +07 +48 +41 +68 +89 +07 +FC +D5 +00 +68 +C0 +B2 +70 +47 +04 +48 +04 +22 +41 +68 +C9 +07 +FC +D1 +02 +60 +FE +E7 +00 +60 +00 +40 +00 +E0 +00 +40 +00 +10 +01 +40 +70 +B5 +FD +4D +08 +28 +0E +D2 +84 +00 +00 +29 +06 +D0 +01 +29 +06 +D0 +FA +A0 +01 +F0 +CC +FD +28 +59 +70 +BD +28 +59 +70 +BD +FE +48 +00 +59 +70 +BD +01 +46 +FD +A0 +01 +F0 +C1 +FD +28 +68 +70 +BD +10 +B5 +FF +F7 +E4 +FF +01 +68 +01 +22 +11 +43 +01 +60 +10 +BD +08 +B5 +FF +F7 +DC +FF +00 +68 +00 +90 +00 +98 +C0 +07 +C0 +0F +08 +BD +10 +B5 +FF +F7 +D3 +FF +01 +68 +08 +22 +11 +43 +01 +60 +10 +BD +10 +B5 +FF +F7 +CB +FF +01 +68 +04 +22 +11 +43 +01 +60 +10 +BD +10 +B5 +FF +F7 +C3 +FF +01 +68 +02 +22 +11 +43 +01 +60 +10 +BD +10 +B5 +FF +F7 +BB +FF +01 +68 +10 +22 +11 +43 +01 +60 +10 +BD +10 +B5 +FF +F7 +B3 +FF +01 +68 +20 +22 +11 +43 +01 +60 +10 +BD +0F +B4 +F0 +B5 +83 +B0 +04 +46 +0E +9F +0D +9E +0C +9D +11 +99 +10 +98 +FF +F7 +A3 +FF +04 +61 +0A +99 +81 +61 +C1 +68 +01 +91 +01 +6A +00 +91 +01 +99 +7A +07 +C9 +08 +C9 +00 +52 +0F +11 +43 +01 +91 +00 +99 +AA +B2 +09 +0C +09 +04 +11 +43 +00 +91 +00 +99 +32 +04 +89 +B2 +11 +43 +00 +91 +00 +99 +01 +62 +01 +99 +C1 +60 +03 +B0 +F0 +BC +08 +BC +04 +B0 +18 +47 +08 +B5 +FF +F7 +7E +FF +00 +6A +00 +90 +00 +98 +80 +B2 +08 +BD +08 +B5 +FF +F7 +76 +FF +00 +6A +00 +90 +00 +98 +00 +0C +08 +BD +F8 +B5 +0C +46 +1D +46 +06 +9E +0B +99 +0A +98 +FF +F7 +69 +FF +44 +61 +C5 +61 +41 +6A +00 +91 +00 +99 +0A +0C +12 +04 +31 +0C +0A +43 +00 +92 +00 +9A +12 +0C +12 +04 +0A +43 +00 +92 +00 +99 +41 +62 +F8 +BD +0F +B4 +F0 +B5 +87 +B0 +84 +46 +0F +46 +11 +A8 +2B +C8 +10 +9E +15 +9C +00 +96 +05 +94 +03 +93 +02 +91 +01 +90 +04 +95 +39 +46 +60 +46 +0F +9B +FF +F7 +95 +FF +0F +99 +00 +91 +28 +46 +21 +46 +FF +F7 +3D +FF +47 +61 +00 +99 +C1 +61 +41 +6A +00 +91 +00 +99 +0A +0C +12 +04 +31 +0C +0A +43 +00 +92 +00 +9A +12 +0C +12 +04 +0A +43 +00 +92 +00 +99 +41 +62 +07 +B0 +F0 +BC +08 +BC +04 +B0 +18 +47 +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +1F +FF +81 +6A +00 +91 +00 +99 +22 +07 +09 +09 +09 +01 +12 +0F +11 +43 +00 +91 +00 +99 +F0 +22 +91 +43 +22 +06 +12 +0F +12 +01 +11 +43 +00 +91 +00 +99 +03 +22 +12 +02 +91 +43 +A2 +05 +92 +0F +12 +02 +11 +43 +00 +91 +00 +99 +01 +22 +92 +02 +91 +43 +62 +05 +D2 +0F +92 +02 +11 +43 +00 +91 +00 +99 +01 +22 +D2 +02 +91 +43 +22 +05 +D2 +0F +D2 +02 +11 +43 +00 +91 +00 +99 +81 +62 +38 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +E9 +FE +C1 +6A +00 +91 +00 +99 +22 +07 +09 +09 +09 +01 +12 +0F +11 +43 +00 +91 +00 +99 +F0 +22 +91 +43 +22 +06 +12 +0F +12 +01 +11 +43 +00 +91 +00 +99 +03 +22 +12 +02 +91 +43 +A2 +05 +92 +0F +12 +02 +11 +43 +00 +91 +00 +99 +01 +22 +92 +02 +91 +43 +62 +05 +D2 +0F +92 +02 +11 +43 +00 +91 +00 +99 +01 +22 +D2 +02 +91 +43 +22 +05 +D2 +0F +D2 +02 +11 +43 +00 +91 +00 +99 +C1 +62 +38 +BD +10 +B5 +0B +46 +04 +46 +84 +B0 +11 +46 +18 +46 +FF +F7 +B2 +FE +C1 +68 +00 +91 +01 +68 +01 +91 +81 +6A +02 +91 +C1 +6A +03 +91 +00 +99 +F0 +22 +91 +43 +22 +07 +12 +0E +11 +43 +00 +91 +00 +99 +07 +22 +92 +04 +91 +43 +22 +06 +52 +0F +92 +04 +11 +43 +00 +91 +00 +99 +07 +22 +52 +05 +91 +43 +62 +05 +52 +0F +52 +05 +11 +43 +00 +91 +00 +99 +01 +22 +12 +06 +91 +43 +22 +05 +D2 +0F +12 +06 +11 +43 +00 +91 +01 +99 +02 +22 +91 +43 +E2 +06 +D2 +0F +52 +00 +11 +43 +01 +91 +02 +9A +0F +21 +09 +04 +23 +04 +1B +0F +8A +43 +1B +04 +1A +43 +02 +92 +03 +9A +8A +43 +21 +03 +09 +0F +09 +04 +0A +43 +03 +92 +00 +99 +C1 +60 +01 +99 +01 +60 +02 +99 +81 +62 +03 +99 +C1 +62 +04 +B0 +10 +BD +FF +B5 +81 +B0 +0A +9E +0C +46 +1D +46 +32 +46 +19 +46 +FF +F7 +A3 +FF +28 +46 +31 +46 +FF +F7 +59 +FE +81 +6A +00 +91 +00 +99 +22 +07 +09 +09 +09 +01 +12 +0F +11 +43 +00 +91 +00 +99 +F0 +22 +91 +43 +22 +06 +12 +0F +12 +01 +11 +43 +00 +91 +00 +99 +03 +22 +12 +02 +91 +43 +A2 +05 +92 +0F +12 +02 +11 +43 +00 +91 +00 +99 +01 +22 +92 +02 +91 +43 +62 +05 +D2 +0F +92 +02 +11 +43 +00 +91 +00 +99 +01 +27 +FF +02 +22 +05 +D2 +0F +B9 +43 +D2 +02 +11 +43 +00 +91 +00 +99 +81 +62 +28 +46 +31 +46 +03 +9C +FF +F7 +26 +FE +C1 +6A +00 +91 +00 +99 +22 +07 +09 +09 +09 +01 +12 +0F +11 +43 +00 +91 +00 +99 +F0 +22 +91 +43 +22 +06 +12 +0F +12 +01 +11 +43 +00 +91 +00 +99 +03 +22 +12 +02 +91 +43 +A2 +05 +92 +0F +12 +02 +11 +43 +00 +91 +00 +99 +7A +10 +91 +43 +62 +05 +D2 +0F +92 +02 +11 +43 +2B +E0 +20 +00 +00 +30 +45 +72 +72 +6F +72 +20 +2D +20 +53 +65 +63 +75 +72 +69 +74 +79 +20 +6D +75 +73 +74 +20 +62 +65 +20 +30 +20 +6F +72 +20 +31 +00 +28 +00 +00 +30 +45 +72 +72 +6F +72 +20 +2D +20 +50 +6F +69 +6E +74 +65 +72 +20 +66 +6F +72 +20 +43 +68 +61 +6E +6E +65 +6C +20 +25 +64 +20 +69 +73 +20 +6E +6F +74 +20 +64 +65 +66 +69 +6E +65 +64 +00 +00 +00 +00 +91 +00 +99 +22 +05 +D2 +0F +B9 +43 +D2 +02 +11 +43 +00 +91 +00 +99 +C1 +62 +05 +B0 +F0 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +C5 +FD +01 +6B +00 +91 +00 +99 +A2 +B2 +09 +0C +09 +04 +11 +43 +00 +91 +00 +99 +22 +0C +89 +B2 +12 +04 +11 +43 +00 +91 +00 +99 +01 +63 +38 +BD +0F +B4 +F0 +B5 +87 +B0 +8E +46 +94 +46 +12 +9F +16 +9D +11 +99 +10 +98 +15 +9E +14 +9C +13 +9A +05 +95 +02 +97 +03 +92 +01 +91 +00 +90 +04 +96 +62 +46 +71 +46 +0C +98 +FF +F7 +EF +FD +30 +46 +29 +46 +FF +F7 +99 +FD +01 +6B +00 +91 +00 +99 +A2 +B2 +09 +0C +09 +04 +11 +43 +00 +91 +00 +99 +22 +0C +89 +B2 +12 +04 +11 +43 +00 +91 +00 +99 +01 +63 +07 +B0 +F0 +BC +08 +BC +04 +B0 +18 +47 +30 +B5 +04 +46 +0D +46 +83 +B0 +19 +46 +10 +46 +FF +F7 +7C +FD +C1 +6B +00 +91 +41 +6B +01 +91 +00 +99 +A2 +B2 +09 +0C +09 +04 +11 +43 +00 +91 +00 +99 +22 +0C +89 +B2 +12 +04 +11 +43 +00 +91 +01 +99 +AA +B2 +09 +0C +09 +04 +11 +43 +01 +91 +01 +99 +2A +0C +89 +B2 +12 +04 +11 +43 +01 +91 +00 +99 +C1 +63 +01 +99 +41 +63 +03 +B0 +30 +BD +0F +B4 +F0 +B5 +87 +B0 +96 +46 +9C +46 +10 +A8 +CF +C8 +17 +9C +16 +9D +05 +94 +03 +93 +02 +92 +01 +91 +00 +90 +04 +95 +63 +46 +72 +46 +0D +99 +0C +98 +FF +F7 +97 +FD +28 +46 +21 +46 +FF +F7 +41 +FD +C1 +6B +00 +91 +41 +6B +01 +91 +00 +99 +B2 +B2 +09 +0C +09 +04 +11 +43 +00 +91 +00 +99 +32 +0C +89 +B2 +12 +04 +11 +43 +00 +91 +01 +99 +BA +B2 +09 +0C +09 +04 +11 +43 +01 +91 +01 +99 +3A +0C +89 +B2 +12 +04 +11 +43 +01 +91 +00 +99 +C1 +63 +01 +99 +41 +63 +07 +B0 +F0 +BC +08 +BC +04 +B0 +18 +47 +38 +B5 +05 +46 +0C +46 +19 +46 +10 +46 +FF +F7 +15 +FD +C1 +68 +00 +91 +00 +99 +07 +22 +52 +02 +91 +43 +62 +07 +12 +0D +11 +43 +00 +91 +00 +99 +07 +22 +12 +03 +91 +43 +A2 +06 +52 +0F +12 +03 +11 +43 +00 +91 +00 +99 +C1 +60 +85 +63 +38 +BD +0F +B4 +F0 +B5 +87 +B0 +96 +46 +9C +46 +10 +A8 +8F +C8 +17 +9C +16 +9D +15 +9E +05 +94 +03 +93 +02 +92 +01 +91 +00 +90 +04 +95 +63 +46 +72 +46 +0D +99 +0C +98 +FF +F7 +3A +FD +28 +46 +21 +46 +FF +F7 +E4 +FC +C1 +68 +00 +91 +00 +99 +07 +22 +52 +02 +91 +43 +72 +07 +12 +0D +11 +43 +00 +91 +00 +99 +07 +22 +12 +03 +91 +43 +B2 +06 +52 +0F +12 +03 +11 +43 +00 +91 +00 +99 +C1 +60 +87 +63 +07 +B0 +F0 +BC +08 +BC +04 +B0 +18 +47 +0F +B4 +F0 +B5 +87 +B0 +96 +46 +9C +46 +10 +A8 +CF +C8 +19 +9C +05 +94 +03 +93 +02 +92 +18 +9D +01 +91 +00 +90 +04 +95 +63 +46 +72 +46 +0D +99 +0C +98 +FF +F7 +06 +FD +28 +46 +21 +46 +FF +F7 +B0 +FC +C1 +6B +00 +91 +41 +6B +01 +91 +00 +99 +B2 +B2 +09 +0C +09 +04 +11 +43 +00 +91 +00 +99 +32 +0C +89 +B2 +12 +04 +11 +43 +00 +91 +01 +99 +BA +B2 +09 +0C +09 +04 +11 +43 +01 +91 +01 +99 +3A +0C +89 +B2 +12 +04 +11 +43 +01 +91 +00 +99 +C1 +63 +01 +99 +41 +63 +28 +46 +21 +46 +16 +9F +17 +9E +FF +F7 +8A +FC +C1 +68 +00 +91 +00 +99 +07 +22 +52 +02 +91 +43 +72 +07 +12 +0D +11 +43 +00 +91 +00 +99 +07 +22 +12 +03 +91 +43 +B2 +06 +52 +0F +12 +03 +11 +43 +00 +91 +00 +99 +C1 +60 +87 +63 +07 +B0 +F0 +BC +08 +BC +04 +B0 +18 +47 +70 +B5 +84 +B0 +04 +46 +0D +46 +16 +46 +18 +46 +08 +99 +FF +F7 +66 +FC +01 +6C +00 +91 +00 +99 +1F +22 +12 +02 +91 +43 +E2 +06 +D2 +0C +11 +43 +00 +91 +00 +99 +1F +22 +12 +04 +91 +43 +A2 +05 +D2 +0E +12 +04 +11 +43 +00 +91 +01 +99 +6A +08 +C9 +07 +C9 +0F +52 +00 +11 +43 +01 +91 +02 +99 +72 +08 +C9 +07 +C9 +0F +52 +00 +11 +43 +02 +91 +00 +99 +01 +64 +01 +99 +41 +64 +02 +99 +81 +64 +04 +B0 +70 +BD +0F +B4 +F0 +B5 +87 +B0 +96 +46 +9C +46 +10 +A8 +CF +C8 +17 +9D +18 +9C +05 +94 +03 +93 +02 +92 +01 +91 +00 +90 +04 +95 +63 +46 +72 +46 +0D +99 +0C +98 +FF +F7 +7A +FC +16 +99 +03 +91 +28 +46 +21 +46 +FF +F7 +22 +FC +01 +6C +00 +91 +00 +99 +1F +22 +12 +02 +91 +43 +F2 +06 +D2 +0C +11 +43 +00 +91 +00 +99 +1F +22 +12 +04 +91 +43 +B2 +05 +D2 +0E +12 +04 +11 +43 +00 +91 +01 +99 +7A +08 +C9 +07 +C9 +0F +52 +00 +11 +43 +01 +91 +02 +99 +CA +07 +03 +99 +D2 +0F +49 +08 +49 +00 +0A +43 +02 +92 +00 +99 +01 +64 +01 +99 +41 +64 +02 +99 +81 +64 +07 +B0 +F0 +BC +08 +BC +04 +B0 +18 +47 +08 +B5 +FF +F7 +F2 +FB +40 +68 +00 +90 +00 +98 +C0 +03 +C1 +0F +60 +08 +40 +00 +08 +43 +00 +99 +02 +22 +89 +03 +C9 +0F +49 +00 +90 +43 +08 +43 +00 +99 +04 +22 +49 +03 +C9 +0F +89 +00 +90 +43 +08 +43 +00 +99 +08 +22 +09 +03 +C9 +0F +C9 +00 +90 +43 +08 +43 +00 +99 +10 +22 +C9 +02 +C9 +0F +09 +01 +90 +43 +08 +43 +00 +99 +20 +22 +89 +02 +C9 +0F +49 +01 +90 +43 +08 +43 +08 +BD +08 +B5 +FF +F7 +C3 +FB +40 +68 +00 +90 +00 +98 +C0 +03 +C0 +0F +08 +BD +08 +B5 +FF +F7 +BA +FB +40 +68 +00 +90 +00 +98 +80 +03 +C0 +0F +08 +BD +08 +B5 +FF +F7 +B1 +FB +40 +68 +00 +90 +00 +98 +40 +03 +C0 +0F +08 +BD +08 +B5 +FF +F7 +A8 +FB +40 +68 +00 +90 +00 +98 +00 +03 +C0 +0F +08 +BD +08 +B5 +FF +F7 +9F +FB +40 +68 +00 +90 +00 +98 +C0 +02 +C0 +0F +08 +BD +08 +B5 +FF +F7 +96 +FB +40 +68 +00 +90 +00 +98 +80 +02 +C0 +0F +08 +BD +08 +B5 +FF +F7 +8D +FB +41 +68 +00 +91 +00 +99 +01 +22 +12 +04 +11 +43 +00 +91 +00 +99 +52 +00 +91 +43 +00 +91 +00 +99 +52 +00 +91 +43 +00 +91 +00 +99 +52 +00 +91 +43 +00 +91 +00 +99 +41 +60 +08 +BD +08 +B5 +FF +F7 +74 +FB +41 +68 +00 +91 +00 +99 +01 +22 +52 +04 +11 +43 +00 +91 +00 +99 +52 +10 +91 +43 +00 +91 +00 +99 +92 +00 +91 +43 +00 +91 +00 +99 +52 +00 +91 +43 +00 +91 +00 +99 +41 +60 +08 +BD +08 +B5 +FF +F7 +5B +FB +41 +68 +00 +91 +00 +99 +01 +22 +92 +04 +11 +43 +00 +91 +00 +99 +92 +10 +91 +43 +00 +91 +00 +99 +52 +00 +91 +43 +00 +91 +00 +99 +92 +00 +91 +43 +00 +91 +00 +99 +41 +60 +08 +BD +08 +B5 +FF +F7 +42 +FB +41 +68 +00 +91 +00 +99 +01 +22 +D2 +04 +11 +43 +00 +91 +00 +99 +D2 +10 +91 +43 +00 +91 +00 +99 +52 +00 +91 +43 +00 +91 +00 +99 +52 +00 +91 +43 +00 +91 +00 +99 +41 +60 +08 +BD +08 +B5 +FF +F7 +29 +FB +41 +68 +00 +91 +00 +99 +01 +22 +D2 +04 +11 +43 +00 +91 +00 +99 +D2 +10 +11 +43 +00 +91 +00 +99 +52 +00 +11 +43 +00 +91 +00 +99 +52 +00 +11 +43 +00 +91 +00 +99 +41 +60 +08 +BD +08 +B5 +FF +F7 +10 +FB +40 +68 +00 +90 +00 +98 +C0 +01 +C1 +0F +60 +08 +40 +00 +08 +43 +00 +99 +02 +22 +89 +01 +C9 +0F +49 +00 +90 +43 +08 +43 +00 +99 +04 +22 +49 +01 +C9 +0F +89 +00 +90 +43 +08 +43 +08 +BD +08 +B5 +FF +F7 +F6 +FA +40 +68 +00 +90 +00 +98 +C0 +01 +C0 +0F +08 +BD +08 +B5 +FF +F7 +ED +FA +40 +68 +00 +90 +00 +98 +80 +01 +C0 +0F +08 +BD +08 +B5 +FF +F7 +E4 +FA +40 +68 +00 +90 +00 +98 +40 +01 +C0 +0F +08 +BD +08 +B5 +FF +F7 +DB +FA +40 +68 +00 +90 +00 +98 +C1 +07 +C9 +0F +60 +08 +40 +00 +08 +43 +00 +99 +02 +22 +89 +07 +C9 +0F +49 +00 +90 +43 +08 +43 +00 +99 +04 +22 +49 +07 +C9 +0F +89 +00 +90 +43 +08 +43 +00 +99 +08 +22 +09 +07 +C9 +0F +C9 +00 +90 +43 +08 +43 +00 +99 +10 +22 +C9 +05 +C9 +0F +09 +01 +90 +43 +08 +43 +00 +99 +20 +22 +89 +05 +C9 +0F +49 +01 +90 +43 +08 +43 +00 +99 +40 +22 +49 +05 +C9 +0F +89 +01 +90 +43 +08 +43 +08 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +A1 +FA +81 +68 +00 +91 +00 +99 +E2 +07 +49 +08 +49 +00 +D2 +0F +11 +43 +00 +91 +00 +99 +02 +22 +91 +43 +A2 +07 +D2 +0F +52 +00 +11 +43 +00 +91 +00 +99 +04 +22 +91 +43 +62 +07 +D2 +0F +92 +00 +11 +43 +00 +91 +00 +99 +08 +22 +91 +43 +22 +07 +D2 +0F +D2 +00 +11 +43 +00 +91 +00 +99 +81 +60 +38 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +76 +FA +81 +68 +00 +91 +00 +99 +E2 +07 +49 +08 +49 +00 +D2 +0F +11 +43 +00 +91 +00 +99 +81 +60 +38 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +63 +FA +81 +68 +00 +91 +00 +99 +02 +22 +91 +43 +E2 +07 +92 +0F +11 +43 +00 +91 +00 +99 +81 +60 +38 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +50 +FA +81 +68 +00 +91 +00 +99 +04 +22 +91 +43 +E2 +07 +52 +0F +11 +43 +00 +91 +00 +99 +81 +60 +38 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +3D +FA +81 +68 +00 +91 +00 +99 +08 +22 +91 +43 +E2 +07 +12 +0F +11 +43 +00 +91 +00 +99 +81 +60 +38 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +2A +FA +81 +68 +00 +91 +00 +99 +FF +22 +01 +32 +91 +43 +E2 +07 +D2 +0D +11 +43 +00 +91 +00 +99 +01 +22 +52 +02 +91 +43 +A2 +07 +D2 +0F +52 +02 +11 +43 +00 +91 +00 +99 +01 +22 +92 +02 +91 +43 +62 +07 +D2 +0F +92 +02 +11 +43 +00 +91 +00 +99 +81 +60 +38 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +04 +FA +81 +68 +00 +91 +00 +99 +FF +22 +01 +32 +91 +43 +E2 +07 +D2 +0D +11 +43 +00 +91 +00 +99 +81 +60 +38 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +F0 +F9 +81 +68 +00 +91 +00 +99 +01 +22 +52 +02 +91 +43 +E2 +07 +92 +0D +11 +43 +00 +91 +00 +99 +81 +60 +38 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +DC +F9 +81 +68 +00 +91 +00 +99 +01 +22 +92 +02 +91 +43 +E2 +07 +52 +0D +11 +43 +00 +91 +00 +99 +81 +60 +38 +BD +08 +B5 +FF +F7 +CC +F9 +80 +30 +00 +69 +00 +90 +00 +98 +C1 +07 +C9 +0F +60 +08 +40 +00 +08 +43 +00 +99 +02 +22 +89 +07 +C9 +0F +49 +00 +90 +43 +08 +43 +00 +99 +04 +22 +49 +07 +C9 +0F +89 +00 +90 +43 +08 +43 +00 +99 +08 +22 +09 +07 +C9 +0F +C9 +00 +90 +43 +08 +43 +00 +99 +10 +22 +C9 +06 +C9 +0F +09 +01 +90 +43 +08 +43 +00 +99 +20 +22 +09 +06 +C9 +0F +49 +01 +90 +43 +08 +43 +00 +99 +FC +4A +09 +0C +89 +01 +10 +40 +08 +43 +08 +BD +08 +B5 +FF +F7 +96 +F9 +00 +68 +00 +90 +00 +98 +C0 +03 +C1 +0F +60 +08 +40 +00 +08 +43 +00 +99 +06 +22 +49 +03 +89 +0F +49 +00 +90 +43 +08 +43 +08 +BD +08 +B5 +FF +F7 +83 +F9 +00 +68 +00 +90 +00 +98 +C0 +02 +C1 +0F +60 +08 +40 +00 +08 +43 +00 +99 +06 +22 +49 +02 +89 +0F +49 +00 +90 +43 +08 +43 +08 +BD +08 +B5 +FF +F7 +70 +F9 +00 +68 +00 +90 +00 +98 +C0 +01 +C0 +0F +08 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +63 +F9 +01 +68 +00 +91 +00 +99 +01 +22 +12 +05 +11 +43 +00 +91 +00 +99 +03 +22 +52 +05 +91 +43 +A2 +07 +52 +0A +11 +43 +00 +91 +00 +99 +49 +08 +49 +00 +00 +91 +00 +99 +02 +22 +91 +43 +00 +91 +00 +99 +04 +22 +91 +43 +00 +91 +00 +99 +08 +22 +91 +43 +00 +91 +00 +99 +10 +22 +91 +43 +00 +91 +00 +99 +20 +22 +91 +43 +00 +91 +00 +99 +D2 +02 +91 +43 +00 +91 +00 +99 +12 +02 +91 +43 +00 +91 +00 +99 +01 +60 +38 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +2A +F9 +01 +68 +00 +91 +00 +99 +01 +22 +12 +04 +11 +43 +00 +91 +00 +99 +03 +22 +52 +04 +91 +43 +A2 +07 +52 +0B +11 +43 +00 +91 +00 +99 +49 +08 +49 +00 +00 +91 +00 +99 +02 +22 +91 +43 +00 +91 +00 +99 +04 +22 +91 +43 +00 +91 +00 +99 +08 +22 +91 +43 +00 +91 +00 +99 +10 +22 +91 +43 +00 +91 +00 +99 +20 +22 +91 +43 +00 +91 +00 +99 +D2 +03 +91 +43 +00 +91 +00 +99 +12 +01 +91 +43 +00 +91 +00 +99 +01 +60 +38 +BD +08 +B5 +FF +F7 +F5 +F8 +01 +68 +00 +91 +00 +99 +01 +22 +12 +06 +11 +43 +00 +91 +00 +99 +49 +08 +49 +00 +00 +91 +00 +99 +02 +22 +91 +43 +00 +91 +00 +99 +04 +22 +91 +43 +00 +91 +00 +99 +08 +22 +91 +43 +00 +91 +00 +99 +10 +22 +91 +43 +00 +91 +00 +99 +20 +22 +91 +43 +00 +91 +00 +99 +D2 +03 +91 +43 +00 +91 +00 +99 +12 +11 +91 +43 +00 +91 +00 +99 +01 +60 +08 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +C4 +F8 +C1 +68 +00 +91 +C2 +6C +00 +99 +01 +23 +5B +06 +99 +43 +E3 +07 +9B +09 +19 +43 +00 +91 +E1 +05 +0B +0E +11 +0A +09 +02 +19 +43 +03 +22 +12 +02 +91 +43 +62 +05 +92 +0F +12 +02 +11 +43 +03 +22 +92 +02 +91 +43 +E2 +04 +92 +0F +92 +02 +11 +43 +FF +23 +E2 +02 +1B +04 +12 +0E +12 +04 +99 +43 +1A +40 +11 +43 +C1 +64 +00 +99 +C1 +60 +38 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +93 +F8 +C1 +68 +00 +91 +00 +99 +01 +22 +52 +06 +91 +43 +E2 +07 +92 +09 +11 +43 +00 +91 +00 +99 +C1 +60 +38 +BD +10 +B5 +0B +46 +04 +46 +82 +B0 +11 +46 +18 +46 +FF +F7 +7E +F8 +C1 +68 +01 +91 +01 +6D +00 +91 +01 +99 +01 +22 +92 +06 +91 +43 +E2 +07 +52 +09 +11 +43 +01 +91 +00 +99 +E2 +05 +09 +0A +09 +02 +12 +0E +11 +43 +00 +91 +00 +99 +03 +22 +12 +02 +91 +43 +62 +05 +92 +0F +12 +02 +11 +43 +00 +91 +00 +99 +03 +22 +92 +02 +91 +43 +E2 +04 +92 +0F +92 +02 +11 +43 +00 +91 +00 +99 +FF +22 +12 +04 +91 +43 +E2 +02 +12 +0E +12 +04 +11 +43 +00 +91 +00 +99 +01 +65 +01 +99 +C1 +60 +02 +B0 +10 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +43 +F8 +C1 +68 +00 +91 +00 +99 +01 +22 +92 +06 +91 +43 +E2 +07 +52 +09 +11 +43 +00 +91 +00 +99 +C1 +60 +38 +BD +10 +B5 +0B +46 +04 +46 +82 +B0 +11 +46 +18 +46 +FF +F7 +2E +F8 +C1 +68 +01 +91 +41 +6D +00 +91 +01 +99 +01 +22 +D2 +06 +91 +43 +E2 +07 +12 +09 +11 +43 +01 +91 +00 +99 +62 +06 +89 +09 +89 +01 +92 +0E +11 +43 +00 +91 +00 +99 +03 +22 +12 +02 +91 +43 +E2 +05 +92 +0F +12 +02 +11 +43 +00 +91 +00 +99 +41 +65 +01 +99 +C1 +60 +02 +B0 +10 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FF +F7 +05 +F8 +C1 +68 +00 +91 +00 +99 +01 +22 +D2 +06 +91 +43 +E2 +07 +12 +09 +11 +43 +00 +91 +00 +99 +C1 +60 +38 +BD +10 +B5 +0B +46 +04 +46 +82 +B0 +11 +46 +18 +46 +FE +F7 +F0 +FF +C1 +68 +01 +91 +81 +6E +00 +91 +00 +99 +03 +22 +52 +02 +91 +43 +A2 +07 +52 +0D +11 +43 +00 +91 +00 +99 +81 +66 +01 +99 +C1 +60 +02 +B0 +10 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FE +F7 +D7 +FF +C1 +68 +00 +91 +00 +99 +01 +22 +52 +07 +91 +43 +E2 +07 +92 +08 +11 +43 +00 +91 +00 +99 +C1 +60 +38 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FE +F7 +C3 +FF +01 +6F +00 +91 +00 +99 +22 +07 +09 +09 +09 +01 +12 +0F +11 +43 +00 +91 +00 +99 +F0 +22 +91 +43 +22 +06 +12 +0F +12 +01 +11 +43 +00 +91 +00 +99 +03 +22 +12 +02 +91 +43 +A2 +05 +92 +0F +12 +02 +11 +43 +00 +91 +00 +99 +01 +67 +38 +BD +3F +00 +C0 +FF +38 +B5 +05 +46 +0C +46 +19 +46 +10 +46 +FE +F7 +9D +FF +81 +6F +00 +91 +00 +99 +EA +07 +49 +08 +49 +00 +D2 +0F +11 +43 +00 +91 +00 +99 +8A +07 +92 +0F +69 +19 +64 +41 +23 +07 +09 +09 +19 +43 +89 +00 +0A +43 +00 +92 +00 +99 +81 +67 +A1 +08 +C1 +67 +38 +BD +08 +B5 +FE +F7 +81 +FF +00 +6F +00 +90 +00 +98 +00 +98 +00 +20 +08 +BD +08 +B5 +FE +F7 +78 +FF +00 +6F +00 +90 +00 +98 +80 +05 +80 +0F +08 +BD +00 +B5 +83 +B0 +FE +F7 +6E +FF +81 +6F +01 +91 +C0 +6F +00 +90 +00 +9A +01 +98 +03 +B0 +80 +08 +80 +00 +C1 +17 +11 +43 +00 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FE +F7 +5B +FF +41 +6F +00 +91 +00 +99 +A2 +B2 +09 +0C +09 +04 +11 +43 +00 +91 +00 +99 +01 +22 +12 +04 +91 +43 +E2 +03 +D2 +0F +12 +04 +11 +43 +00 +91 +00 +99 +41 +67 +38 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FE +F7 +40 +FF +41 +6F +00 +91 +00 +99 +09 +0C +09 +04 +21 +43 +00 +91 +00 +99 +41 +67 +38 +BD +38 +B5 +0B +46 +04 +46 +11 +46 +18 +46 +FE +F7 +2F +FF +41 +6F +00 +91 +00 +99 +01 +22 +12 +04 +91 +43 +E2 +07 +D2 +0B +11 +43 +00 +91 +00 +99 +41 +67 +38 +BD +70 +B5 +84 +B0 +05 +46 +16 +46 +00 +24 +18 +46 +08 +99 +FE +F7 +19 +FF +C1 +68 +02 +91 +81 +6D +00 +91 +01 +6E +01 +91 +20 +2E +10 +D2 +00 +2E +0B +D0 +F1 +07 +00 +D0 +01 +24 +71 +08 +06 +D0 +62 +00 +52 +1C +54 +00 +49 +1E +64 +1C +00 +29 +F8 +D1 +00 +99 +00 +94 +03 +E0 +00 +99 +00 +21 +C9 +43 +00 +91 +01 +99 +01 +95 +02 +99 +01 +22 +12 +07 +11 +43 +02 +91 +00 +99 +81 +65 +01 +99 +01 +66 +02 +99 +C1 +60 +04 +B0 +70 +BD +F9 +48 +00 +68 +70 +47 +F8 +48 +00 +68 +70 +47 +F6 +49 +81 +B0 +89 +68 +00 +91 +00 +99 +40 +08 +C9 +07 +C9 +0F +40 +00 +08 +43 +00 +99 +02 +22 +89 +07 +C9 +0F +49 +00 +90 +43 +08 +43 +00 +99 +04 +22 +49 +07 +C9 +0F +89 +00 +90 +43 +08 +43 +00 +99 +08 +22 +09 +07 +C9 +0F +C9 +00 +90 +43 +08 +43 +01 +B0 +70 +47 +E6 +49 +81 +B0 +89 +68 +00 +91 +00 +99 +40 +08 +C9 +07 +C9 +0F +40 +00 +08 +43 +00 +99 +02 +22 +89 +07 +C9 +0F +49 +00 +90 +43 +08 +43 +00 +99 +04 +22 +49 +07 +C9 +0F +89 +00 +90 +43 +08 +43 +00 +99 +08 +22 +09 +07 +C9 +0F +C9 +00 +90 +43 +08 +43 +01 +B0 +70 +47 +D5 +48 +81 +B0 +80 +68 +00 +90 +00 +98 +01 +B0 +C0 +07 +C0 +0F +70 +47 +D1 +48 +81 +B0 +80 +68 +00 +90 +00 +98 +01 +B0 +C0 +07 +C0 +0F +70 +47 +CC +48 +81 +B0 +80 +68 +00 +90 +00 +98 +01 +B0 +80 +07 +C0 +0F +70 +47 +C8 +48 +81 +B0 +80 +68 +00 +90 +00 +98 +01 +B0 +80 +07 +C0 +0F +70 +47 +C3 +48 +81 +B0 +80 +68 +00 +90 +00 +98 +01 +B0 +40 +07 +C0 +0F +70 +47 +BF +48 +81 +B0 +80 +68 +00 +90 +00 +98 +01 +B0 +40 +07 +C0 +0F +70 +47 +BA +48 +81 +B0 +80 +68 +00 +90 +00 +98 +01 +B0 +00 +07 +C0 +0F +70 +47 +B6 +48 +81 +B0 +80 +68 +00 +90 +00 +98 +01 +B0 +00 +07 +C0 +0F +70 +47 +B2 +49 +81 +B0 +89 +68 +00 +91 +00 +99 +40 +08 +89 +03 +C9 +0F +40 +00 +08 +43 +00 +99 +02 +22 +49 +03 +C9 +0F +49 +00 +90 +43 +08 +43 +00 +99 +04 +22 +09 +03 +C9 +0F +89 +00 +90 +43 +08 +43 +01 +B0 +70 +47 +A4 +49 +81 +B0 +89 +68 +00 +91 +00 +99 +40 +08 +89 +03 +C9 +0F +40 +00 +08 +43 +00 +99 +02 +22 +49 +03 +C9 +0F +49 +00 +90 +43 +08 +43 +00 +99 +04 +22 +09 +03 +C9 +0F +89 +00 +90 +43 +08 +43 +01 +B0 +70 +47 +98 +49 +81 +B0 +8A +68 +00 +92 +00 +9A +01 +23 +5B +04 +9A +43 +C3 +07 +9B +0B +1A +43 +00 +92 +00 +9A +01 +23 +9B +04 +9A +43 +83 +07 +DB +0F +9B +04 +1A +43 +00 +92 +00 +9A +01 +23 +DB +04 +40 +07 +C0 +0F +9A +43 +C0 +04 +02 +43 +00 +92 +00 +98 +88 +60 +01 +B0 +70 +47 +86 +49 +81 +B0 +8A +68 +00 +92 +00 +9A +01 +23 +5B +04 +9A +43 +C3 +07 +9B +0B +1A +43 +00 +92 +00 +9A +01 +23 +9B +04 +9A +43 +83 +07 +DB +0F +9B +04 +1A +43 +00 +92 +00 +9A +01 +23 +DB +04 +40 +07 +C0 +0F +9A +43 +C0 +04 +02 +43 +00 +92 +00 +98 +88 +60 +01 +B0 +70 +47 +76 +48 +81 +B0 +81 +68 +00 +91 +00 +99 +01 +22 +52 +04 +11 +43 +00 +91 +00 +99 +52 +00 +91 +43 +00 +91 +00 +99 +52 +00 +91 +43 +00 +91 +00 +99 +81 +60 +01 +B0 +70 +47 +6A +48 +81 +B0 +81 +68 +00 +91 +00 +99 +01 +22 +52 +04 +11 +43 +00 +91 +00 +99 +52 +00 +91 +43 +00 +91 +00 +99 +52 +00 +91 +43 +00 +91 +00 +99 +81 +60 +01 +B0 +70 +47 +61 +48 +81 +B0 +81 +68 +00 +91 +00 +99 +01 +22 +52 +04 +91 +43 +00 +91 +00 +99 +52 +00 +11 +43 +00 +91 +00 +99 +52 +00 +91 +43 +00 +91 +00 +99 +81 +60 +01 +B0 +70 +47 +55 +48 +81 +B0 +81 +68 +00 +91 +00 +99 +01 +22 +52 +04 +91 +43 +00 +91 +00 +99 +52 +00 +11 +43 +00 +91 +00 +99 +52 +00 +91 +43 +00 +91 +00 +99 +81 +60 +01 +B0 +70 +47 +4C +48 +81 +B0 +81 +68 +00 +91 +00 +99 +01 +22 +52 +04 +91 +43 +00 +91 +00 +99 +52 +00 +91 +43 +00 +91 +00 +99 +52 +00 +11 +43 +00 +91 +00 +99 +81 +60 +01 +B0 +70 +47 +40 +48 +81 +B0 +81 +68 +00 +91 +00 +99 +01 +22 +52 +04 +91 +43 +00 +91 +00 +99 +52 +00 +91 +43 +00 +91 +00 +99 +52 +00 +11 +43 +00 +91 +00 +99 +81 +60 +01 +B0 +70 +47 +37 +49 +81 +B0 +CA +68 +00 +92 +00 +9A +C3 +07 +52 +08 +52 +00 +DB +0F +1A +43 +00 +92 +00 +9A +02 +23 +9A +43 +83 +07 +DB +0F +5B +00 +1A +43 +00 +92 +00 +9A +04 +23 +9A +43 +43 +07 +DB +0F +9B +00 +1A +43 +00 +92 +00 +9A +00 +07 +08 +23 +C0 +0F +9A +43 +C0 +00 +02 +43 +00 +92 +00 +98 +C8 +60 +01 +B0 +70 +47 +22 +49 +81 +B0 +CA +68 +00 +92 +00 +9A +C3 +07 +52 +08 +52 +00 +DB +0F +1A +43 +00 +92 +00 +9A +02 +23 +9A +43 +83 +07 +DB +0F +5B +00 +1A +43 +00 +92 +00 +9A +04 +23 +9A +43 +43 +07 +DB +0F +9B +00 +1A +43 +00 +92 +00 +9A +00 +07 +08 +23 +C0 +0F +9A +43 +C0 +00 +02 +43 +00 +92 +00 +98 +C8 +60 +01 +B0 +70 +47 +10 +49 +81 +B0 +CA +68 +00 +92 +00 +9A +C0 +07 +52 +08 +52 +00 +C0 +0F +02 +43 +00 +92 +00 +98 +C8 +60 +01 +B0 +70 +47 +07 +49 +81 +B0 +CA +68 +00 +92 +00 +9A +C0 +07 +52 +08 +52 +00 +C0 +0F +02 +43 +00 +92 +00 +98 +C8 +60 +01 +B0 +70 +47 +00 +00 +00 +C2 +00 +40 +00 +C1 +00 +40 +FA +49 +81 +B0 +CA +68 +00 +92 +00 +9A +02 +23 +C0 +07 +9A +43 +80 +0F +02 +43 +00 +92 +00 +98 +C8 +60 +01 +B0 +70 +47 +F4 +49 +81 +B0 +CA +68 +00 +92 +00 +9A +02 +23 +C0 +07 +9A +43 +80 +0F +02 +43 +00 +92 +00 +98 +C8 +60 +01 +B0 +70 +47 +EB +49 +81 +B0 +CA +68 +00 +92 +00 +9A +04 +23 +C0 +07 +9A +43 +40 +0F +02 +43 +00 +92 +00 +98 +C8 +60 +01 +B0 +70 +47 +E5 +49 +81 +B0 +CA +68 +00 +92 +00 +9A +04 +23 +C0 +07 +9A +43 +40 +0F +02 +43 +00 +92 +00 +98 +C8 +60 +01 +B0 +70 +47 +DC +49 +81 +B0 +CA +68 +00 +92 +00 +9A +08 +23 +C0 +07 +9A +43 +00 +0F +02 +43 +00 +92 +00 +98 +C8 +60 +01 +B0 +70 +47 +D6 +49 +81 +B0 +CA +68 +00 +92 +00 +9A +08 +23 +C0 +07 +9A +43 +00 +0F +02 +43 +00 +92 +00 +98 +C8 +60 +01 +B0 +70 +47 +CD +49 +81 +B0 +CA +68 +00 +92 +00 +9A +C0 +07 +52 +08 +52 +00 +C0 +0F +02 +43 +00 +92 +00 +98 +C8 +60 +01 +B0 +70 +47 +C7 +49 +81 +B0 +CA +68 +00 +92 +00 +9A +C0 +07 +52 +08 +52 +00 +C0 +0F +02 +43 +00 +92 +00 +98 +C8 +60 +01 +B0 +70 +47 +BE +48 +81 +B0 +C1 +68 +00 +91 +00 +99 +82 +15 +11 +43 +00 +91 +00 +99 +C1 +60 +01 +B0 +70 +47 +B9 +48 +81 +B0 +C1 +68 +00 +91 +00 +99 +82 +15 +11 +43 +00 +91 +00 +99 +C1 +60 +01 +B0 +70 +47 +B2 +48 +81 +B0 +C1 +68 +00 +91 +00 +99 +42 +15 +11 +43 +00 +91 +00 +99 +C1 +60 +01 +B0 +70 +47 +AD +48 +81 +B0 +C1 +68 +00 +91 +00 +99 +42 +15 +11 +43 +00 +91 +00 +99 +C1 +60 +01 +B0 +70 +47 +A6 +49 +81 +B0 +CA +68 +00 +92 +00 +9A +92 +00 +92 +08 +80 +07 +02 +43 +00 +92 +00 +98 +C8 +60 +01 +B0 +70 +47 +A0 +49 +81 +B0 +CA +68 +00 +92 +00 +9A +92 +00 +92 +08 +80 +07 +02 +43 +00 +92 +00 +98 +C8 +60 +01 +B0 +70 +47 +98 +49 +82 +B0 +8A +69 +00 +92 +4A +69 +01 +92 +01 +9A +83 +06 +92 +09 +92 +01 +9B +0E +1A +43 +01 +92 +00 +9A +83 +02 +12 +0C +12 +04 +1B +0C +1A +43 +00 +92 +00 +9A +01 +23 +1B +04 +9A +43 +43 +02 +DB +0F +1B +04 +1A +43 +00 +92 +00 +9A +01 +23 +5B +04 +00 +02 +C0 +0F +9A +43 +40 +04 +02 +43 +00 +92 +01 +98 +48 +61 +00 +98 +88 +61 +02 +B0 +70 +47 +83 +49 +82 +B0 +8A +69 +00 +92 +4A +69 +01 +92 +01 +9A +83 +06 +92 +09 +92 +01 +9B +0E +1A +43 +01 +92 +00 +9A +83 +02 +12 +0C +12 +04 +1B +0C +1A +43 +00 +92 +00 +9A +01 +23 +1B +04 +9A +43 +43 +02 +DB +0F +1B +04 +1A +43 +00 +92 +00 +9A +01 +23 +5B +04 +00 +02 +C0 +0F +9A +43 +40 +04 +02 +43 +00 +92 +01 +98 +48 +61 +00 +98 +88 +61 +02 +B0 +70 +47 +6C +49 +81 +B0 +4A +69 +00 +92 +00 +9A +80 +06 +92 +09 +92 +01 +80 +0E +02 +43 +00 +92 +00 +98 +48 +61 +01 +B0 +70 +47 +66 +49 +81 +B0 +4A +69 +00 +92 +00 +9A +80 +06 +92 +09 +92 +01 +80 +0E +02 +43 +00 +92 +00 +98 +48 +61 +01 +B0 +70 +47 +F8 +B5 +05 +46 +0E +46 +5E +A0 +00 +F0 +8E +F9 +5A +4C +60 +69 +00 +90 +00 +98 +A9 +06 +80 +09 +80 +01 +89 +0E +08 +43 +00 +90 +00 +98 +60 +61 +5B +A0 +00 +F0 +7F +F9 +A0 +69 +00 +90 +5E +A0 +00 +F0 +7A +F9 +00 +98 +00 +0C +00 +04 +30 +43 +00 +90 +00 +98 +01 +21 +09 +04 +08 +43 +00 +90 +00 +98 +A0 +61 +F8 +BD +4B +4A +81 +B0 +53 +69 +00 +93 +00 +9B +80 +06 +9B +09 +9B +01 +80 +0E +03 +43 +00 +93 +00 +98 +50 +61 +90 +69 +00 +90 +00 +98 +00 +0C +00 +04 +08 +43 +00 +90 +00 +98 +01 +21 +09 +04 +08 +43 +00 +90 +00 +98 +90 +61 +01 +B0 +70 +47 +3B +4A +81 +B0 +53 +69 +00 +93 +00 +9B +80 +06 +9B +09 +9B +01 +80 +0E +03 +43 +00 +93 +00 +98 +50 +61 +90 +69 +00 +90 +00 +98 +01 +23 +5B +04 +C9 +07 +98 +43 +89 +0B +08 +43 +00 +90 +00 +98 +90 +61 +01 +B0 +70 +47 +2F +4A +81 +B0 +53 +69 +00 +93 +00 +9B +80 +06 +9B +09 +9B +01 +80 +0E +03 +43 +00 +93 +00 +98 +50 +61 +90 +69 +00 +90 +00 +98 +01 +23 +5B +04 +C9 +07 +98 +43 +89 +0B +08 +43 +00 +90 +00 +98 +90 +61 +01 +B0 +70 +47 +2F +49 +08 +60 +70 +47 +10 +B4 +01 +22 +82 +B0 +82 +40 +2C +4B +00 +92 +1A +68 +00 +9C +01 +92 +81 +40 +A2 +43 +21 +40 +0A +43 +1A +60 +02 +B0 +10 +BC +70 +47 +25 +49 +88 +60 +70 +47 +10 +B4 +23 +4C +01 +22 +A3 +68 +82 +40 +81 +40 +93 +43 +11 +40 +0B +43 +A3 +60 +10 +BC +70 +47 +1E +49 +88 +62 +70 +47 +10 +B4 +1C +4C +01 +22 +A3 +6A +82 +40 +81 +40 +93 +43 +11 +40 +0B +43 +A3 +62 +10 +BC +70 +47 +17 +49 +81 +B0 +0A +68 +00 +92 +00 +9A +C0 +07 +52 +08 +52 +00 +C0 +0F +02 +43 +00 +92 +00 +98 +08 +60 +01 +B0 +70 +47 +00 +00 +00 +C1 +00 +40 +00 +C2 +00 +40 +53 +65 +74 +20 +43 +68 +61 +6E +6E +65 +6C +20 +50 +6F +69 +6E +74 +65 +72 +00 +52 +65 +61 +64 +20 +53 +65 +63 +75 +72 +65 +20 +63 +6F +6E +66 +69 +67 +00 +00 +53 +65 +74 +20 +43 +48 +49 +44 +00 +00 +00 +00 +00 +C0 +00 +40 +40 +C0 +00 +40 +2A +49 +81 +B0 +0A +68 +00 +92 +00 +9A +02 +23 +C0 +07 +9A +43 +80 +0F +02 +43 +00 +92 +00 +98 +08 +60 +01 +B0 +70 +47 +23 +48 +81 +B0 +01 +68 +00 +91 +00 +99 +42 +06 +11 +43 +00 +91 +00 +99 +01 +60 +01 +B0 +70 +47 +1D +48 +40 +68 +C0 +07 +C0 +0F +70 +47 +1A +49 +01 +20 +48 +60 +70 +47 +19 +48 +81 +B0 +80 +68 +00 +90 +00 +98 +01 +B0 +00 +03 +C0 +0F +70 +47 +16 +48 +81 +B0 +80 +68 +00 +90 +00 +98 +01 +B0 +00 +03 +C0 +0F +70 +47 +12 +49 +81 +B0 +08 +6B +00 +90 +00 +98 +01 +B0 +80 +05 +80 +0E +40 +1C +70 +47 +0D +49 +81 +B0 +48 +6B +00 +90 +00 +98 +01 +B0 +C0 +05 +C0 +0D +70 +47 +09 +49 +81 +B0 +48 +6B +00 +90 +00 +98 +01 +B0 +00 +04 +40 +0E +70 +47 +03 +48 +00 +68 +70 +47 +00 +00 +40 +C0 +00 +40 +00 +C2 +00 +40 +00 +C1 +00 +40 +80 +CF +00 +40 +70 +47 +70 +B5 +06 +46 +00 +F0 +13 +F9 +05 +68 +30 +46 +0B +30 +C4 +08 +E4 +00 +B4 +42 +01 +D8 +00 +20 +70 +BD +68 +68 +2A +46 +00 +28 +18 +D0 +01 +68 +A1 +42 +11 +D3 +0B +46 +21 +46 +08 +31 +8B +42 +08 +D3 +43 +68 +01 +19 +4B +60 +03 +68 +1B +1B +0B +60 +51 +60 +04 +60 +01 +E0 +41 +68 +51 +60 +00 +1D +70 +BD +02 +46 +40 +68 +00 +28 +E6 +D1 +21 +46 +28 +46 +00 +F0 +F1 +F8 +00 +28 +DC +D1 +70 +BD +70 +B5 +04 +46 +05 +1F +00 +F0 +E1 +F8 +00 +68 +00 +2C +1A +D0 +44 +68 +01 +E0 +20 +46 +64 +68 +00 +2C +01 +D0 +AC +42 +F9 +D3 +01 +68 +0A +18 +AA +42 +04 +D1 +2A +68 +05 +46 +89 +18 +01 +60 +00 +E0 +45 +60 +28 +68 +41 +19 +A1 +42 +05 +D1 +61 +68 +69 +60 +21 +68 +40 +18 +28 +60 +70 +BD +6C +60 +70 +BD +0F +B4 +05 +49 +10 +B5 +03 +AA +02 +98 +00 +F0 +63 +F9 +10 +BC +08 +BC +04 +B0 +18 +47 +00 +00 +1C +00 +00 +30 +F8 +B5 +0E +46 +04 +46 +00 +20 +20 +62 +20 +46 +E1 +68 +88 +47 +00 +28 +29 +D0 +25 +28 +02 +D0 +62 +68 +A1 +68 +20 +E0 +E1 +68 +20 +46 +00 +27 +88 +47 +05 +00 +1E +D0 +28 +46 +41 +38 +19 +28 +02 +D8 +01 +27 +FF +02 +20 +35 +32 +46 +20 +46 +27 +60 +29 +46 +FD +F7 +48 +FE +00 +28 +08 +D0 +01 +28 +04 +D0 +F6 +1D +F6 +08 +F6 +00 +08 +36 +D9 +E7 +36 +1D +D7 +E7 +62 +68 +28 +46 +A1 +68 +90 +47 +20 +6A +40 +1C +CF +E7 +20 +6A +F8 +BD +F7 +B5 +00 +25 +75 +29 +10 +68 +00 +99 +14 +A6 +11 +D0 +C0 +46 +C0 +46 +00 +28 +02 +DA +40 +42 +11 +A6 +08 +E0 +00 +99 +09 +68 +8A +07 +01 +D5 +0F +A6 +02 +E0 +49 +07 +04 +D5 +0E +A6 +01 +25 +01 +E0 +C0 +46 +C0 +46 +00 +9F +00 +24 +24 +37 +04 +E0 +00 +F0 +19 +F9 +30 +31 +39 +55 +64 +1C +00 +28 +F8 +D1 +2B +46 +32 +46 +21 +46 +00 +98 +00 +F0 +A1 +F8 +FE +BD +00 +00 +00 +00 +00 +00 +2D +00 +00 +00 +2B +00 +00 +00 +20 +00 +00 +00 +70 +B5 +04 +46 +0D +46 +21 +46 +10 +68 +C0 +46 +C0 +46 +21 +88 +09 +05 +02 +D5 +0F +4A +7A +44 +02 +E0 +0E +4A +7A +44 +0E +32 +23 +46 +00 +21 +24 +33 +05 +E0 +06 +07 +00 +09 +36 +0F +96 +5D +5E +54 +49 +1C +00 +28 +F7 +D1 +20 +78 +00 +23 +00 +07 +05 +D5 +70 +2D +03 +D0 +00 +29 +01 +D0 +02 +23 +11 +32 +20 +46 +00 +F0 +6E +F8 +70 +BD +F6 +03 +00 +00 +10 +B5 +04 +46 +03 +E0 +FE +F7 +41 +F9 +40 +1C +08 +D0 +20 +78 +05 +49 +64 +1C +00 +28 +F6 +D1 +0A +20 +FE +F7 +37 +F9 +10 +BD +00 +20 +C0 +43 +10 +BD +00 +00 +1C +00 +00 +30 +70 +47 +70 +47 +70 +47 +00 +00 +00 +48 +70 +47 +38 +00 +00 +30 +70 +47 +70 +47 +70 +47 +70 +47 +38 +B5 +04 +46 +0A +46 +00 +20 +69 +46 +C0 +46 +C0 +46 +00 +28 +05 +D0 +02 +46 +20 +46 +00 +99 +00 +F0 +C0 +F8 +01 +20 +38 +BD +10 +B5 +01 +20 +00 +F0 +EC +F8 +10 +BD +F8 +B5 +C0 +46 +C0 +46 +05 +46 +00 +20 +0C +46 +10 +20 +C0 +46 +06 +46 +A8 +19 +A0 +42 +0D +D9 +32 +46 +69 +46 +00 +20 +C0 +46 +C0 +46 +07 +00 +01 +D1 +00 +F0 +D6 +F8 +00 +98 +A0 +42 +00 +D0 +05 +46 +C4 +19 +FF +F7 +C7 +FF +F6 +1D +07 +46 +05 +60 +F0 +08 +C0 +00 +46 +19 +28 +46 +00 +F0 +08 +F8 +B4 +42 +04 +D0 +31 +46 +38 +68 +A2 +1B +00 +F0 +8D +F8 +F8 +BD +00 +21 +01 +60 +41 +60 +80 +60 +70 +47 +10 +20 +70 +47 +FF +B5 +04 +46 +0D +46 +81 +B0 +24 +30 +00 +90 +21 +68 +88 +06 +04 +D5 +10 +22 +E0 +69 +91 +43 +21 +60 +00 +E0 +01 +20 +A8 +42 +01 +DD +47 +1B +00 +E0 +00 +27 +04 +98 +A1 +69 +7A +19 +10 +18 +08 +1A +A0 +61 +20 +78 +C0 +06 +02 +D4 +20 +46 +C0 +46 +C0 +46 +00 +26 +08 +E0 +03 +98 +62 +68 +A1 +68 +80 +5D +90 +47 +20 +6A +40 +1C +76 +1C +20 +62 +04 +98 +86 +42 +F3 +DB +20 +78 +C0 +06 +0A +D5 +20 +46 +C0 +46 +C0 +46 +06 +E0 +62 +68 +A1 +68 +30 +20 +90 +47 +20 +6A +40 +1C +20 +62 +38 +46 +7F +1E +00 +28 +F4 +DC +07 +E0 +00 +98 +62 +68 +A1 +68 +40 +5D +90 +47 +20 +6A +40 +1C +20 +62 +28 +46 +6D +1E +00 +28 +F3 +DC +20 +46 +C0 +46 +C0 +46 +20 +78 +00 +06 +02 +D5 +02 +20 +05 +B0 +F0 +BD +01 +20 +FB +E7 +00 +00 +08 +4B +70 +B5 +0D +46 +7B +44 +00 +F0 +45 +F8 +04 +46 +28 +46 +FE +F7 +83 +F8 +00 +28 +02 +D0 +00 +20 +C0 +43 +70 +BD +20 +46 +70 +BD +00 +00 +FB +E0 +FF +FF +01 +46 +80 +08 +08 +1A +02 +09 +10 +18 +02 +0A +10 +18 +02 +0C +10 +18 +C0 +08 +82 +00 +12 +18 +52 +00 +89 +1A +01 +E0 +40 +1C +0A +39 +0A +29 +FB +D2 +70 +47 +00 +48 +70 +47 +30 +00 +00 +30 +10 +B5 +03 +46 +40 +68 +01 +E0 +03 +46 +40 +68 +00 +28 +01 +D0 +88 +42 +F9 +D3 +18 +68 +C3 +18 +8B +42 +06 +D0 +CB +1C +D8 +08 +C0 +00 +00 +1D +41 +1A +52 +1A +01 +46 +08 +1D +0A +60 +FF +F7 +2B +FE +10 +BD +01 +69 +4A +1C +02 +61 +08 +78 +70 +47 +00 +B5 +8F +B0 +02 +91 +00 +21 +05 +91 +05 +49 +01 +93 +79 +44 +03 +91 +11 +46 +04 +90 +68 +46 +FF +F7 +4B +FE +0F +B0 +00 +BD +00 +00 +E5 +FF +FF +FF +10 +B5 +00 +F0 +31 +F8 +00 +F0 +28 +F8 +10 +BD +75 +46 +FF +F7 +C1 +FF +AE +46 +05 +00 +69 +46 +53 +46 +C0 +08 +C0 +00 +85 +46 +18 +B0 +20 +B5 +FD +F7 +FE +FF +60 +BC +00 +27 +49 +08 +B6 +46 +00 +26 +C0 +C5 +C0 +C5 +C0 +C5 +C0 +C5 +C0 +C5 +C0 +C5 +C0 +C5 +C0 +C5 +40 +3D +49 +00 +8D +46 +70 +47 +10 +B5 +04 +46 +C0 +46 +C0 +46 +20 +46 +FD +F7 +A2 +FC +10 +BD +10 +B5 +00 +28 +01 +D0 +FE +F7 +05 +F8 +10 +BD +00 +00 +10 +B5 +01 +28 +05 +D0 +00 +21 +03 +A0 +00 +F0 +21 +F8 +01 +20 +10 +BD +09 +A1 +F8 +E7 +00 +00 +53 +49 +47 +52 +54 +4D +45 +4D +3A +20 +4F +75 +74 +20 +6F +66 +20 +68 +65 +61 +70 +20 +6D +65 +6D +6F +72 +79 +00 +00 +00 +00 +3A +20 +48 +65 +61 +70 +20 +6D +65 +6D +6F +72 +79 +20 +63 +6F +72 +72 +75 +70 +74 +65 +64 +00 +70 +B5 +05 +46 +0C +46 +0A +20 +00 +E0 +6D +1C +FD +F7 +CE +FF +00 +2D +06 +D0 +28 +78 +00 +28 +F7 +D1 +02 +E0 +64 +1C +FD +F7 +C5 +FF +00 +2C +02 +D0 +20 +78 +00 +28 +F7 +D1 +0A +20 +FD +F7 +BD +FF +70 +BD +10 +F1 +0F +00 +10 +01 +00 +00 +44 +04 +00 +00 +44 +04 +00 +00 +44 +00 +00 +00 +01 +00 +01 +00 +03 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +98 +00 +00 +00 +00 +40 +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +80 +00 +00 +00 +00 +00 +01 +00 +98 +00 +00 +00 +00 +40 +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +80 +00 +00 +00 +00 +00 +02 +00 +98 +00 +00 +00 +00 +40 +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +41 +42 +43 +44 +45 +46 +40 +30 +58 +00 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +61 +62 +63 +64 +65 +66 +40 +30 +78 +00 +0A +43 +6F +72 +74 +65 +78 +20 +4D +69 +63 +72 +6F +63 +6F +6E +74 +72 +6F +6C +6C +65 +72 +20 +53 +79 +73 +74 +65 +6D +20 +44 +65 +73 +69 +67 +6E +20 +4B +69 +74 +20 +2D +20 +44 +4D +41 +20 +54 +65 +73 +74 +20 +2D +20 +72 +65 +76 +69 +73 +69 +6F +6E +20 +24 +52 +65 +76 +69 +73 +69 +6F +6E +3A +20 +33 +37 +31 +33 +32 +31 +20 +24 +0A +00 +00 +00 +00 +F0 +29 +00 +00 +00 +00 +00 +30 +30 +00 +00 +00 +04 +01 +00 +00 +20 +2A +00 +00 +30 +00 +00 +30 +60 +04 +00 +00 +20 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +E1 +F5 +05 +00 +00 +00 +00 +00 +D0 +00 +40 +00 +D1 +00 +40 +00 +D0 +00 +40 +00 +D1 +00 +40 diff --git a/testcodes/dma350_stream_tests/makefile b/testcodes/dma350_stream_tests/makefile new file mode 100644 index 0000000..8735e72 --- /dev/null +++ b/testcodes/dma350_stream_tests/makefile @@ -0,0 +1,285 @@ +#----------------------------------------------------------------------------- +# The confidential and proprietary information contained in this file may +# only be used by a person authorised under and to the extent permitted +# by a subsisting licensing agreement from Arm Limited or its affiliates. +# +# (C) COPYRIGHT 2010-2013 Arm Limited or its affiliates. +# ALL RIGHTS RESERVED +# +# This entire notice must be reproduced on all copies of this file +# and copies of this file may only be made by a person if such person is +# permitted to do so under the terms of a subsisting license agreement +# from Arm Limited or its affiliates. +# +# SVN Information +# +# Checked In : $Date: 2017-10-10 15:55:38 +0100 (Tue, 10 Oct 2017) $ +# +# Revision : $Revision: 371321 $ +# +# Release Information : Cortex-M System Design Kit-r1p1-00rel0 +#----------------------------------------------------------------------------- +# +# Cortex-M System Design Kit software compilation make file +# +#----------------------------------------------------------------------------- +# +# Configurations +# +# Choose the core instantiated, can be +# - CORTEX_M0 +# - CORTEX_M0PLUS +CPU_PRODUCT = CORTEX_M0 + +TARGET = arm-none-eabi +# Shared software directory +SOFTWARE_DIR = $(SOCLABS_NANOSOC_TECH_DIR)/software +CMSIS_DIR = $(SOFTWARE_DIR)/cmsis +CORE_DIR = $(CMSIS_DIR)/CMSIS/Include +GENERIC_DIR = ../generic + + +ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + DEVICE_DIR = $(CMSIS_DIR)/Device/ARM/CMSDK_CM0plus +else + DEVICE_DIR = $(CMSIS_DIR)/Device/ARM/CMSDK_CM0 +endif + +# Program file +TESTNAME = dma350_stream_tests + +# Endian Option +COMPILE_BIGEND = 0 + +# Configuration +ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + USER_DEFINE = -DCORTEX_M0PLUS +else + USER_DEFINE = -DCORTEX_M0 +endif + +DEPS_LIST = makefile + +# Tool chain : ds5 / gcc / keil +TOOL_CHAIN = ds5 + +ifeq ($(TOOL_CHAIN),ds5) + ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + CPU_TYPE = --cpu Cortex-M0plus + else + CPU_TYPE = --cpu Cortex-M0 + endif +endif + +ifeq ($(TOOL_CHAIN),ds6) + ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + CPU_TYPE = -mcpu=Cortex-M0plus + else + CPU_TYPE = -mcpu=Cortex-M0 + endif +endif + +ifeq ($(TOOL_CHAIN),gcc) + ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + CPU_TYPE = -mcpu=cortex-m0plus + else + CPU_TYPE = -mcpu=cortex-m0 + endif +endif + +# Startup code directory for DS-5 +ifeq ($(TOOL_CHAIN),ds5) + STARTUP_DIR = $(DEVICE_DIR)/Source/ARM +endif + +ifeq ($(TOOL_CHAIN),ds6) + STARTUP_DIR = $(DEVICE_DIR)/Source/ARM +endif + +# Startup code directory for gcc +ifeq ($(TOOL_CHAIN),gcc) + STARTUP_DIR = $(DEVICE_DIR)/Source/GCC +endif + +ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + STARTUP_FILE = startup_CMSDK_CM0plus + SYSTEM_FILE = system_CMSDK_CM0plus +else + STARTUP_FILE = startup_CMSDK_CM0 + SYSTEM_FILE = system_CMSDK_CM0 +endif + +# Configuration ID values +GENERIC_FILE = $(GENERIC_DIR)/config_id.h + +# --------------------------------------------------------------------------------------- +# DS-5 options + +# MicroLIB option +COMPILE_MICROLIB = 0 + +# Small Multiply (Cortex-M0/M0+ has small multiplier option) +COMPILE_SMALLMUL = 0 + +ifeq ($(TOOL_CHAIN),ds6) + ARM_TARGET = --target=arm-$(TARGET) + CC_TOOL = armclang -O1 + ASM_TOOL = armclang -masm=armasm $(ARM_TARGET) -c +else + CC_TOOL = armcc -O3 + ASM_TOOL = armasm + ARM_TARGET = -Otime --c99 +endif + +ARM_CC_OPTIONS = $(ARM_TARGET) -c -g -I $(DEVICE_DIR)/Include -I $(CORE_DIR) -I $(GENERIC_DIR) \ + -I $(SOFTWARE_DIR)/common/retarget -I $(SOFTWARE_DIR)/drivers $(USER_DEFINE) +ARM_CC_OPTIONS_DRIVER = $(ARM_TARGET) -c -I $(DEVICE_DIR)/Include -I $(CORE_DIR) -I $(GENERIC_DIR) \ + -I $(SOFTWARE_DIR)/common/retarget -I $(SOFTWARE_DIR)/drivers $(USER_DEFINE) +ARM_ASM_OPTIONS = -g +ARM_LINK_OPTIONS = "--keep=$(STARTUP_FILE).o(RESET)" "--first=$(STARTUP_FILE).o(RESET)" \ + --rw_base 0x30000000 --ro_base 0x00000000 --map + +ifeq ($(COMPILE_BIGEND),1) + # Big Endian + ARM_CC_OPTIONS += --bigend + ARM_ASM_OPTIONS += --bigend + ARM_LINK_OPTIONS += --be8 +endif + +ifeq ($(COMPILE_MICROLIB),1) + # MicroLIB + ARM_CC_OPTIONS += --library_type=microlib + ARM_ASM_OPTIONS += --library_type=microlib --pd "__MICROLIB SETA 1" + ARM_LINK_OPTIONS += --library_type=microlib +endif + +ifeq ($(COMPILE_SMALLMUL),1) + # In Cortex-M0, small multiply takes 32 cycles + ARM_CC_OPTIONS += --multiply_latency=32 +endif + +# --------------------------------------------------------------------------------------- +# gcc options + +GNG_CC = $(TARGET)-gcc +GNU_OBJDUMP = $(TARGET)-objdump +GNU_OBJCOPY = $(TARGET)-objcopy + +LINKER_SCRIPT_PATH = $(SOFTWARE_DIR)/common/scripts +LINKER_SCRIPT = $(LINKER_SCRIPT_PATH)/cmsdk_cm0.ld + +GNU_CC_FLAGS = -g -O3 -mthumb $(CPU_TYPE) + +ifeq ($(COMPILE_BIGEND),1) + # Big Endian + GNU_CC_FLAGS += -mbig-endian +endif + +# --------------------------------------------------------------------------------------- +all: all_$(TOOL_CHAIN) + +# --------------------------------------------------------------------------------------- +# DS-5 +all_ds5 : $(TESTNAME).hex $(TESTNAME).lst +all_ds6 : $(TESTNAME).hex $(TESTNAME).lst + +$(TESTNAME).o : $(SOFTWARE_DIR)/common/validation/$(TESTNAME).c $(GENERIC_FILE) $(DEPS_LIST) + $(CC_TOOL) $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@ + +dma_350_driver.o : $(SOFTWARE_DIR)/drivers/dma_350_command_lib.c $(DEPS_LIST) + $(CC_TOOL) $(ARM_CC_OPTIONS_DRIVER) $(CPU_TYPE) $< -o $@ + +$(SYSTEM_FILE).o : $(DEVICE_DIR)/Source/$(SYSTEM_FILE).c $(DEPS_LIST) + $(CC_TOOL) $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@ + +retarget.o : $(SOFTWARE_DIR)/common/retarget/retarget.c $(DEPS_LIST) + $(CC_TOOL) $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@ + +uart_stdout.o : $(SOFTWARE_DIR)/common/retarget/uart_stdout.c $(DEPS_LIST) + $(CC_TOOL) $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@ + +$(STARTUP_FILE).o : $(STARTUP_DIR)/$(STARTUP_FILE).s $(DEPS_LIST) + $(ASM_TOOL) $(ARM_ASM_OPTIONS) $(CPU_TYPE) $< -o $@ + +$(TESTNAME).ELF : $(TESTNAME).o dma_350_driver.o $(SYSTEM_FILE).o $(STARTUP_FILE).o retarget.o uart_stdout.o + armlink $(ARM_LINK_OPTIONS) -o $@ $(TESTNAME).o $(SYSTEM_FILE).o $(STARTUP_FILE).o retarget.o uart_stdout.o dma_350_driver.o + +$(TESTNAME).hex : $(TESTNAME).ELF + fromelf --vhx --8x1 $< --output $@ + +$(TESTNAME).lst : $(TESTNAME).ELF + fromelf -c -d -e -s $< --output $@ + +# --------------------------------------------------------------------------------------- +# gcc +all_gcc: + $(GNG_CC) $(GNU_CC_FLAGS) $(STARTUP_DIR)/$(STARTUP_FILE).s \ + $(SOFTWARE_DIR)/common/validation/$(TESTNAME).c \ + $(SOFTWARE_DIR)/common/retarget/retarget.c \ + $(SOFTWARE_DIR)/drivers/dma_350_command_lib.c \ + $(SOFTWARE_DIR)/common/retarget/uart_stdout.c \ + $(DEVICE_DIR)/Source/$(SYSTEM_FILE).c \ + -I $(DEVICE_DIR)/Include -I $(CORE_DIR) -I $(GENERIC_DIR)\ + -I $(SOFTWARE_DIR)/common/retarget \ + -I $(SOFTWARE_DIR)/drivers \ + -L $(LINKER_SCRIPT_PATH) \ + -D__STACK_SIZE=0x200 \ + -D__HEAP_SIZE=0x1000 \ + $(USER_DEFINE) -T $(LINKER_SCRIPT) -o $(TESTNAME).o + # Generate disassembly code + $(GNU_OBJDUMP) -S $(TESTNAME).o > $(TESTNAME).lst + # Generate binary file + $(GNU_OBJCOPY) -S $(TESTNAME).o -O binary $(TESTNAME).bin + # Generate hex file + $(GNU_OBJCOPY) -S $(TESTNAME).o -O verilog $(TESTNAME).hex + +# Note: +# If the version of object copy you are using does not support verilog hex file output, +# you can generate the hex file from binary file using the following command +# od -v -A n -t x1 --width=1 $(TESTNAME).bin > $(TESTNAME).hex + + +# --------------------------------------------------------------------------------------- +# Keil MDK + +all_keil: + @echo "Please compile your project code and press ENTER when ready" + @read dummy + +# --------------------------------------------------------------------------------------- +# Binary + +all_bin: $(TESTNAME).bin + # Generate hex file from binary + od -v -A n -t x1 --width=1 $(TESTNAME).bin > $(TESTNAME).hex + +# --------------------------------------------------------------------------------------- +# Clean +clean : + @rm -rf *.o + @if [ -e $(TESTNAME).hex ] ; then \ + rm -rf $(TESTNAME).hex ; \ + fi + @if [ -e $(TESTNAME).lst ] ; then \ + rm -rf $(TESTNAME).lst ; \ + fi + @if [ -e $(TESTNAME).ELF ] ; then \ + rm -rf $(TESTNAME).ELF ; \ + fi + @if [ -e $(TESTNAME).bin ] ; then \ + rm -rf $(TESTNAME).bin ; \ + fi + @rm -rf *.crf + @rm -rf *.plg + @rm -rf *.tra + @rm -rf *.htm + @rm -rf *.map + @rm -rf *.dep + @rm -rf *.d + @rm -rf *.lnp + @rm -rf *.bak + @rm -rf *.lst + @rm -rf *.axf + @rm -rf *.sct + @rm -rf *.__i + @rm -rf *._ia diff --git a/testcodes/excluded_tests.txt b/testcodes/excluded_tests.txt index 3183be7..cf16029 100644 --- a/testcodes/excluded_tests.txt +++ b/testcodes/excluded_tests.txt @@ -1,2 +1,3 @@ rtx_demo -gpio_tests \ No newline at end of file +gpio_tests +dma350_stream_tests \ No newline at end of file -- GitLab